转自js继承5种方式
1、对象冒充
// 对象冒充
function Parent(username) {
this.username = username;
this.hello = function () {
alert("hello");
}
}
function Child(username, password) {
this.method = Parent; // 将临时属性指向Parent所指向的队形
this.method(username); // 执行Parent所指向的对象函数
delete this.method; // 销毁临时属性,此时Child已经拥有了parent的所有属性和方法
this.password = password;
this.world = function () {
alert('world');
}
}
var parent = new Parent();
var child = new Child();
parent.hello();
child.hello();
2、call或者apply
// call和apply继承
function Parent2(username) {
this.username = username;
this.hello = function () {
alert("hello");
}
}
function Child2(username, password) {
Parent2.call(this, username); // call方法
this.world = function () {
alert('world');
}
}
function Child3(username, password) {
Parent2.apply(this, new Array(username)); // apply方法
this.world = function () {
alert('world');
}
}
3、原型链继承
// 原型方法
function Parent4() {
}
Parent4.prototype.hello = 'hello';
Parent4.prototype.sayHello = function () {
alert('hello');
}
function Child4() {
}
Child4.prototype = new Parent4();
Child4.prototype.world = 'world';
Child4.prototype.sayWorld = function () {
alert('world');
}
4、混合式继承
// 混合式继承
function Parent5(username) {
this.username = username;
}
Parent5.prototype.sayHello = function () {
alert('hello');
}
function Child5(username) {
Parent5.call(this, username);
this.world = 'world';
}
Child5.prototype = new Parent5();
Child5.prototype.sayWorld = function () {
alert('sayWorld');
}