`
gyht0808
  • 浏览: 114972 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JavaScript读书笔记六

阅读更多

 

原型链是实现继承的主要方法。基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。

 

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
 

个人博客同步更新

分享到:
评论
1 楼 superobin 2011-03-18  
貌似上次猜对了

这次说的有点简单了,建议阐述下访问和设置对象属性的机制,进而促进理解原型的一些特性。
还有内置类型 如 Object、Function、等等的原型、原型的原型是啥之类的,因为这些内置对象有些的原型是js虚拟机订死的(记得有个图来着)

另外,其实可以通过其他方式实现全继承:
function() {
    this.initialize.apply(this,arguments);
}


其中在原型中定义initialize就可以间接实现构造函数的继承了。

相关推荐

    javascript读书笔记

    JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的解释型编程语言,广泛用于网页和网络应用。在学习JavaScript时,了解其基本概念至关重要。以下是一些关键知识点的详细说明: 1. 变量: 在JavaScript中,...

    JavaScript读书笔记

    该份文档于2004年整理,前段时间翻阅出来看,颇有收益,方便初学者的入门学习,也可以作为索引文件进行查阅、

    javascript 高级程序设计 读书笔记(3)

    这篇读书笔记主要聚焦在第三部分,这部分通常涵盖了更高级的主题,如对象、原型、闭包以及模块化等。结合提供的"listutil.js"文件,我们可以深入探讨JavaScript中的实用工具函数和编程技巧。 首先,JavaScript的...

    JavaScript学习笔记

    JavaScript学习笔记主要涵盖...通过阅读和理解这篇"JavaScript学习笔记",你可以逐步提升JavaScript技能,从而更好地开发网页和应用程序。记得实践是检验真理的唯一标准,多写代码,多解决问题,才能真正掌握这门语言。

    javascript 笔记 适合初学者 jquery chm 资料

    通过阅读笔记和深入学习jQuery CHM,初学者可以在短时间内提升自己的前端开发技能。 此外,实践是检验学习效果的最好方式。初学者应该尝试自己动手编写简单的JavaScript程序和使用jQuery实现动态效果,这样不仅可以...

    javascript学习笔记

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,广泛用于数据传输。 #### jQuery jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、...

    JavaScript_DOM_编程艺术读书笔记

    ### JavaScript DOM 编程艺术读书笔记关键知识点解析 #### 一、JavaScript简史与相关技术简介 - **XHTML(可扩展的超文本标记语言)**:这是一种更加严格、更加强大的HTML版本,旨在提高网页的可读性和可扩展性。 ...

    JavaScript笔记第一章—课程准备.pdf

    注释不会被浏览器执行,但可以被开发者阅读。 JavaScript可以通过不同的方式引入到HTML页面中,主要有三种方法:行内引入、外部引入和内部引入。行内引入是通过在HTML标签中直接写入JavaScript代码实现,如`('我要...

    前端开发必备JavaScript(含源码课件笔记总结)

    课程中的源码分析部分,可能是对一些经典库或框架的源码解读,如jQuery、lodash等,通过阅读源码,可以深入理解JavaScript的高级技巧和优化手段,提升代码质量。 八、笔记总结 笔记部分是对整个学习过程的记录和...

    Javascript 读书笔记索引贴

    基础篇 Javascript学习笔记1 数据类型 Javascript学习笔记2 函数 Javascript学习笔记3 作用域 Javascript学习笔记4 Eval函数 Javascript学习笔记5 类和对象 Javascript学习笔记6 prototype的提出 Javascript学习...

    李炎恢JavaScript-pdf文档笔记

    《李炎恢JavaScript-pdf文档笔记》是一份详细记录了JavaScript编程语言基础知识至高级应用的教程,涵盖了从第一章到第三十四章的丰富内容。这个压缩包包含了一份PDF文档,旨在帮助学习者深入理解并掌握JavaScript的...

    JAVASCRIPT从入门到精通读书笔记.pdf

    JAVASCRIPT从入门到精通读书笔记.pdf

    蓝杰JavaScript学习笔记

    《蓝杰JavaScript学习笔记》是一份综合性的JavaScript学习资料,主要涵盖了JavaScript在网页动态操作、DOM操作以及事件处理等方面的基础知识。这篇笔记通过多个实例文件,如`dynamicCreateTable.htm`、`...

    JavaScript学习笔记-适合初学者

    本学习笔记专为初学者设计,旨在帮助新接触JavaScript的人快速掌握这门语言的核心概念和实用技巧。 首先,"JavaScript特效.chm"可能是一份关于JavaScript实现的各种网页特效的教程。这些特效可能包括图片轮播、下拉...

    javascript权威指南笔记

    JavaScript权威指南笔记是深入理解和掌握JavaScript这门编程语言的重要参考资料。这份笔记包含了作者在研读《JavaScript权威指南...通过阅读和理解这些笔记,你可以提升自己的JavaScript技能,更好地应对各种开发场景。

    狂神Java学习笔记————前端入门——html、css、JavaScript学习代码

    通过阅读这些笔记,学习者不仅可以掌握前端开发的基本技能,还能了解到实际开发中可能会遇到的问题和解决策略。 文件列表中的"CSS1"和"CSS2"可能包含了一些CSS的实例或练习,"html"文件夹可能包含了HTML页面示例,...

    JavaScript 精粹读书笔记(1,2)

    JavaScript是一门在Web开发中不可或缺的编程语言,它被用于创建交互式的网页内容和增强用户体验。虽然它广受欢迎,但同样伴随着许多争议和挑战。在《JavaScript 精粹》一书中,作者深入探讨了JavaScript的特性和最佳...

Global site tag (gtag.js) - Google Analytics