继承

继承有什么作用?

继承是指一个对象可以使用另一个对象的属性和方法
可以使子类共享父类的属性和方法,可以覆盖和扩展父类的属性和方法,节省了代码量,减少了内存的使用。

下面两种写法有什么区别?

//方法1
function People(name, sex){
    this.name = name;
    this.sex = sex;
    this.printName = function(){
        console.log(this.name);
    }
}
var p1 = new People('饥人谷', 2)

//方法2
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}

Person.prototype.printName = function(){
    console.log(this.name);
}
var p1 = new Person('若愚', 27);

区别:方法一函数所创建的方法在对象内部,方法二函数所创建的方法在prototye原型上
方法一再创建一个Person对象实例时需要再创建一个printName方法,占用新的内存。
而方法二printName方法写在原型上,当对象要使用该方法只需到原型链里调用就可以了,达到节省内存的效果。

Object.create 有什么作用?兼容性如何?

Object.create()创建一个具有指定原型且可选择性地包含指定属性的对象

student.prototype=Object.create(Person.prototype)
兼容性.png

hasOwnProperty有什么作用? 如何使用?

hasOwnPerperty是Object.prototype的一个方法,可以判断一个对象是否包含自定义属性而不是原型链上的属性,hasOwnProperty是JavaScript中唯一一个处理属性但是不查找原型链的函数

m.hasOwnProperty('name'); // true
m.hasOwnProperty('printName'); // false
Male.prototype.hasOwnProperty('printAge'); // true

如下代码中call的作用是什么?

function Person(name, sex){
    this.name = name;
    this.sex = sex;
}
function Male(name, sex, age){
    Person.call(this, name, sex);    //这里的 call 有什么作用
    this.age = age;
}

这里call的作用是调用person函数,然后设置this对象为male,从而让male函数可以调用person的属性

补全代码,实现继承

function Person(name, sex){
    this.name=name
    this.sex=sex
  
}

Person.prototype.getName = function(){
    console.log(this.name)
};    

function Male(name, sex, age){
   Person.call(this,name,sex)
   this.age=age
}

Male.prototype = Object.create(Person.prototype)
Male.prototype.constructor=Male
Male.prototype.getAge = function(){
    console.log(this.age)
};

var ruoyu = new Male('若愚', '男', 27);
ruoyu.getName();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容