继承有什么作用?
继承是指一个对象可以使用另一个对象的属性和方法
可以使子类共享父类的属性和方法,可以覆盖和扩展父类的属性和方法,节省了代码量,减少了内存的使用。
下面两种写法有什么区别?
//方法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)
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();