本帖最后由 闪电侠就是我 于 2018-5-7 23:30 编辑
/**
* call+原型组合实现继承,继承有很多种,这种继承的好处是能够共用单一的方法,每个子类有自己的属性
*/
//父类构造
function Person(name){
this.name=name;
}
//子类构造
function Son(name,age){
this.age=age;
Person.call(this,name);
}
//修改原型对象为父类对象的原型
Son.prototype.__proto__=Person.prototype;
//向子类原型对象中添加方法
Son.prototype.getAge = function(){
console.log('age is '+this.age);
}
//向父类原型中添加方法
Person.prototype.getName = function(){
console.log('name is '+this.name);
}
var s = new Son('小白',22);
s.getName();
s.getAge();
图解:
1,每一个对象都必须有构造函数和原型对象,最顶级的对象是Object的原型对象,他的__proto__值为null,
2, 每个对象都具有一个__porto__属性指向他的原型对象.每一个构造都有一个prototype指向他的原型对象
3,构造函数也是一个对象
4,作用域链由__proto__连接而成:因此查找该对象具有的属性的时候现在自己的空间里面找,找不到顺着__proto__的指向继续往上找
,如果到最终原型对象还是没有找到就报错
/**
* js使用apply+原型+arguments指向实现继承
*/
//父类构造
function Parent(){
this.name=arguments[0];
}
//子类构造
function Son(){
//使用apply来将父类的所有的私有变量伪造过来
Parent.apply(this,arguments);
this.age = arguments[1];
}
//具体实现继承
Son.prototype.__proto__=Parent.prototype;
var s = new Son('小白',33);
console.log(s);
|
|