A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闪电侠就是我 初级黑马   /  2018-5-7 23:22  /  1414 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闪电侠就是我 于 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);



1 个回复

倒序浏览
学习了,大神武威
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马