原型链是实现继承的主要方法。基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
function SuperType() {
this.property = true;
}
SuperType.prototype.getSuperValue = function () {
return this.property;
}
function SubType() {
this.subproperty = false;
}
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function() {
return this.subproperty;
}
var instance = new SubType();
alert(instance.getSuperValue()); // true
alert(instance instanceof Object); // true
alert(instance instanceof SuperType); // true
alert(instance instanceof SubType); // true
alert(Object.prototype.isPrototypeOf(instance)); // true
alert(SuperType.prototype.isPrototypeOf(instance)); // true
alert(SubType.prototype.isPrototypeOf(instance)); // true
实现的本质是重写原型对象,代之以一个新类型的实例。给原型添加方法的代码一定要放在替换原型的语句之后,在通过原型链实现继承时,不能使用对象字面量创建原型方法,因为这样就会重写原型链。
通过原型来实现继承时,原型实际上会变成另一个类型的实例,实例会恭喜。而且在创建子类型的时候,不能向超类型的构造函数传递参数。
使用使用一种叫做借用构造函数的技术,解决了原型中包含引用类型值所带来问题。
function SuperType(name) {
this.colors = ["red", "green", "blue"];
this.name = name;
}
function SubType() {
// 继承了SuperTyle, 同时还传递了参数
SuperType.call(this, "Miles");
this.age = 24;
}
var instance1 = new SubType();
instance1.colors.push("black");
alert(instance1.colors); // "red,green,blue,black"
alert(instance1.name); // "Miles"
alert(instance1.age); // 24
var instance2 = new SubType();
alert(instance2.colors); // "red,green,blue"
借用构造函数的方法都在构造函数中定义,因此函数的复用的问题没法解决。
组合继承,指的是讲原型链和借用构造函数的技术组合到一起,使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。
function SuperType(name) {
this.colors = ["red", "blue", "green"];
this.name = name;
}
SuperType.prototype.sayName = function() {
alert(this.name);
}
function SubType(name, age) {
// 继承了SuperTyle, 同时还传递了参数
SuperType.call(this, name);
this.age = age;
}
SubType.prototype = new SuperType();
SubType.prototype.sayAge = function() {
alert(this.age);
}
var instance1 = new SubType("Miles", 24);
instance1.colors.push("black");
alert(instance1.colors); // "red,blue,green,black"
instance1.sayName(); // "Miles"
instance1.sayAge(); // 24
var instance2 = new SubType("Jenny", 24);
alert(instance2.colors); // "red,blue,green"
instance2.sayName(); // "Jenny"
instance2.sayAge(); // 24
与个人博客同步更新
分享到:
相关推荐
JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的解释型编程语言,广泛用于网页和网络应用。在学习JavaScript时,了解其基本概念至关重要。以下是一些关键知识点的详细说明: 1. 变量: 在JavaScript中,...
该份文档于2004年整理,前段时间翻阅出来看,颇有收益,方便初学者的入门学习,也可以作为索引文件进行查阅、
这篇读书笔记主要聚焦在第三部分,这部分通常涵盖了更高级的主题,如对象、原型、闭包以及模块化等。结合提供的"listutil.js"文件,我们可以深入探讨JavaScript中的实用工具函数和编程技巧。 首先,JavaScript的...
JavaScript学习笔记主要涵盖...通过阅读和理解这篇"JavaScript学习笔记",你可以逐步提升JavaScript技能,从而更好地开发网页和应用程序。记得实践是检验真理的唯一标准,多写代码,多解决问题,才能真正掌握这门语言。
通过阅读笔记和深入学习jQuery CHM,初学者可以在短时间内提升自己的前端开发技能。 此外,实践是检验学习效果的最好方式。初学者应该尝试自己动手编写简单的JavaScript程序和使用jQuery实现动态效果,这样不仅可以...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,广泛用于数据传输。 #### jQuery jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、...
### JavaScript DOM 编程艺术读书笔记关键知识点解析 #### 一、JavaScript简史与相关技术简介 - **XHTML(可扩展的超文本标记语言)**:这是一种更加严格、更加强大的HTML版本,旨在提高网页的可读性和可扩展性。 ...
注释不会被浏览器执行,但可以被开发者阅读。 JavaScript可以通过不同的方式引入到HTML页面中,主要有三种方法:行内引入、外部引入和内部引入。行内引入是通过在HTML标签中直接写入JavaScript代码实现,如`('我要...
课程中的源码分析部分,可能是对一些经典库或框架的源码解读,如jQuery、lodash等,通过阅读源码,可以深入理解JavaScript的高级技巧和优化手段,提升代码质量。 八、笔记总结 笔记部分是对整个学习过程的记录和...
基础篇 Javascript学习笔记1 数据类型 Javascript学习笔记2 函数 Javascript学习笔记3 作用域 Javascript学习笔记4 Eval函数 Javascript学习笔记5 类和对象 Javascript学习笔记6 prototype的提出 Javascript学习...
《李炎恢JavaScript-pdf文档笔记》是一份详细记录了JavaScript编程语言基础知识至高级应用的教程,涵盖了从第一章到第三十四章的丰富内容。这个压缩包包含了一份PDF文档,旨在帮助学习者深入理解并掌握JavaScript的...
JAVASCRIPT从入门到精通读书笔记.pdf
《蓝杰JavaScript学习笔记》是一份综合性的JavaScript学习资料,主要涵盖了JavaScript在网页动态操作、DOM操作以及事件处理等方面的基础知识。这篇笔记通过多个实例文件,如`dynamicCreateTable.htm`、`...
本学习笔记专为初学者设计,旨在帮助新接触JavaScript的人快速掌握这门语言的核心概念和实用技巧。 首先,"JavaScript特效.chm"可能是一份关于JavaScript实现的各种网页特效的教程。这些特效可能包括图片轮播、下拉...
JavaScript权威指南笔记是深入理解和掌握JavaScript这门编程语言的重要参考资料。这份笔记包含了作者在研读《JavaScript权威指南...通过阅读和理解这些笔记,你可以提升自己的JavaScript技能,更好地应对各种开发场景。
通过阅读这些笔记,学习者不仅可以掌握前端开发的基本技能,还能了解到实际开发中可能会遇到的问题和解决策略。 文件列表中的"CSS1"和"CSS2"可能包含了一些CSS的实例或练习,"html"文件夹可能包含了HTML页面示例,...
JavaScript是一门在Web开发中不可或缺的编程语言,它被用于创建交互式的网页内容和增强用户体验。虽然它广受欢迎,但同样伴随着许多争议和挑战。在《JavaScript 精粹》一书中,作者深入探讨了JavaScript的特性和最佳...