js继承的实现方式
2021-06-29 21:04
标签:call article 缺点 head return 原型 混合继承 组合 也有 js的面向对象是基于原型的,因此js的对象继承方式也有些特殊,下面我具体谈一下js的几种常用继承方式 1.使用new方法继承 实现原理:在子类的构造函数中调用父类的构造函数。 2.使用call方法实现 实现原理:使用call方法改变函数上下文this指向,使之传入具体的函数对象。 3.使用apply方法实现 实现原理:使用apply方法改变函数上下文this指向,使之传入具体的函数对象。 4.使用原型链(prototype)方法实现 实现原理:子类的原型对象指向父类的实例,即重写类的原型。 5.使用混合方式实现 实现原理:使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。 6. 寄生组合继承 实现原理:通过寄生方式,砍掉父类的实例属性,这样,在调用两次父类的构造的时候,就不会初始化两次实例方法/属性,避免的混合继承的缺点 js继承的实现方式 标签:call article 缺点 head return 原型 混合继承 组合 也有 原文地址:http://www.cnblogs.com/nurdun/p/7139632.htmlfunction Parent(name){
this.name = name;
this.age = 40;
this.sayName = function(){
console.log(this.name);
}
this.sayAge = function(){
console.log(this.age);
}
}
function Child(name){
this.parent = Parent;
this.parent(name);
delete this.parent;
this.saySomething = function(){
console.log(this.name);
this.sayAge();
}
}
var child = new Child(‘Lee‘);
child.saySomething();
//Lee
//40
function Parent(name){
this.name = name;
this.age = 40;
this.say = function(){
console.log(this.name + this.age);
}
}
function Child(name){
Parent.call(this,name);
}
var child = new Child(‘Mike‘);
child.say();//Mike40
function Parent(name){
this.name = name;
this.age = 40;
this.say = function(){
console.log(this.name + this.age);
}
}
function Child(name){
Parent.apply(this,[name]);
//Parent.apply(this,arguments); 效果同上
}
var child = new Child(‘Wade‘);
child.say();//wade40
function Parent(name){
this.name = name;
this.say = function(){
console.log(this.name +‘ ‘+ this.age);
}
}
function Child(age){
this.age = age;
this.saySomething = function(){
console.log(this.name);
}
}
Child.prototype = new Parent(‘petter‘);
var child = new Child(20);
child.say();//petter 20
function Parent(age){
this.name = ‘petter‘;
this.age = age;
}
Parent.prototype.say = function(){
return this.name + ‘ ‘ + this.age;
}
function Child(age){
Parent.call(this,age);
//Parent.apply(this,[age]);
this.age = age;
}
Child.prototype = new Parent();
var child = new Child(21);
child.say();//petter 21
function Animal(name){
this.name = name;
this.sleep = function(){
console.log(this.name + ‘is sleeping‘);
}
}
function Cat(name){
Animal.call(this);
this.name = name || ‘Tom‘;
}
(function(){
// 创建一个没有实例方法的类
var Super = function(){};
Super.prototype = Animal.prototype;
//将实例作为子类的原型
Cat.prototype = new Super();
})();
// Test Code
var cat = new Cat();
console.log(cat.name);//Tom
console.log(cat.sleep());//Tom is sleeping
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); //true
上一篇:js概念