js继承主要有原型链继承和对象冒充继承两种,他们各有优缺点,实际中都是结合两种方式使用
// 父类
function Father (name) {
this.name1 = name;
this.print1 = function () {
alert("print1(): " + this.name1 + " " + this.name2);
};
}
Father.prototype.name2 = "name2";
Father.prototype.print2 = function () {
alert("print2(): " + this.name1 + " " + this.name2);
};
var f1 = new Father("name1");
f1.print1(); // "print1(): name1 name2"
f1.print2(); // "print2(): name1 name2"
var f2 = new Father("new name1");
f2.name2 = "new name2";
f2.print1(); // "print1(): new name1 new name2"
f2.print2(); // "print2(): new name1 new name2"
// 1.单纯的通过原型继承
// 单纯通过原型继承要求父类构造函数应该是无参数的构造函数,否则会造成有些成员不能被初始化
// 在这个例子里,因为父类构造函数有个参数name,所以通过原型继承时,
// 这个参数name没有传递给Father的构造函数,造成this.name成员没有被初始化
// 注意:原型继承可以继承父类通过this.xxx和Father.prototype.xxx定义的所有属性和方法
function Son () {}
Son.prototype = new Father();
var s1 = new Son();
s1.print1(); // "print1(): undefined name2" // 因为this.name成员没有被初始化
s1.print2(); // "print2(): undefined name2"
// 2. 单纯的通过对象冒充继承
// 通过call方式继承
// 单纯通过call方式继承,只能继承父类通过this.xxx定义的所有属性和方法,而父类通过Father.prototype.xxx
// 定义的所有属性和方法都不能被继承
function Son2 (name) {
Father.call(this, name);
//Father.apply(this, new Array(name));
}
var s2 = new Son2("son");
s2.print1(); // "print1(): son undefined" // 父类通过prototype定义的属性不能被继承
s2.print2(); // error // 父类通过prototype定义的方法不能被继承
// 3. 混合原型继承和对象冒充继承
// 原型继承继承了父类通过prototype设置的属性和方法
// 对象冒充继承继承了父类通过this设置的属性和方法
function Son3 (name) {
Father.call(this, name); // 对象冒充。实质上是this指针转移
}
Son3.prototype = new Father(); // 原型继承
var s3 = new Son3("son3");
s3.print1(); // "print1(): son3 name2"
s3.print2(); // "print2(): son3 name2"
分享到:
相关推荐
js继承实现示例代码,js继承实现示例代码,js继承实现示例代码
js继承的用法, function initGrid(){ $('#'+instance.options.table).datagrid(instance.options); } initGrid(); return instance;
在JavaScript中继承是一个非常复杂的话题,比其他任何面向对象的语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。与它们不同,在JavaScript中要想达到传承公用成员的目的,...
javascript做为一门脚本语言,但面向对象思想在其中也有体现,本文档阐述和总结了js中继承的实现,及个方法的利弊!
js没有特别明确的实现如何继承,但是能够通过特殊手段实现继承的,有四种方法
原型式继承 原型链式继承 借用构造函数(类式继承) 组合继承 寄生组合式继承 结束语 前言 对于灵活的js而言,继承相比于java等语言,继承实现方式可谓百花齐放。方式的多样就意味着知识点繁多,当然也是面试时...
javascript 继承派生等问题的资料,都是网上收集的,学会apply call 就懂js面向对象的原理了。
JS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txt
JS继承的实现方式转载整理。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Javascript继承机制原理 可以参考下
JavaScript继承的三种方法实例 继承 继承: 首先继承是一种关系,类(class)与类之间的关系,JS中没有类,但是可以通过构造函数模拟类,然后通过原型来实现继承。 继承也是为了数据共享,js中的继承也是为了实现...
js继承
Js继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs继承深讨.docxJs...
JavaScript继承与多继承实例分析.docx
javascript继承之为什么要继承.docx
说好的讲解JavaScript继承,可是迟迟到现在讲解。废话不多说,直接进入正题。 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考《面向对象JS基础讲解,工厂模式、构造...
JS继承的几种方式的附录源码
JavaScript继承机制研究.pdf
JS继承笔记.7z
JavaScript继承机制探讨及其应用.pdf