美文网首页
继承相关问题

继承相关问题

作者: 辉夜乀 | 来源:发表于2017-05-15 22:33 被阅读27次

问题11:继承有什么作用?

  • 概念:继承就是子类拥有父类的属性和方法,
  • 作用:
  • 父类中是更加通用的属性和方法,通过继承,子类拥有父类的属性和方法,不需要重新去写这些重复的代码,提高了代码的重用性,
  • 想要给所有子类修改属性和方法,只要在父类中修改就能“牵一发而动全身”,所有子类都修改了,提高了代码的可维护性
  • 直接给子类添加新的属性和方法,子类就会拥有这些属性和方法,表现出多态化,而父类不会被“污染”,提高了代码的独立性

问题12: 下面两种写法有什么区别?

//方法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);

/*方法一创建的实例,它的 printName 方法是在自己的属性上,
每创建一个实例,都要对它绑定一次这个方法

方法二创建的实例,它的 printName 方法是在原型对象 __proto__ 上,
所有实例共享同一个 __proto__ , 所有只绑定了一次该方法

一般我们选择方法二,把通用的方法绑定在原型上,通过继承让每个实例拥有该方法,
这样能提高代码的重用性,节省内存,提高性能
*/

问题13: Object.create 有什么作用?兼容性如何?

作用:创建一个以该对象为原型的实例

var me = {
    name: "cg",
    sayName: function(){
        console.log("My name is " + this.name);
    }
}
var p = Object.create(me)
    //以 me 对象为原型,创建了实例 p
p.__proto__ === me //true
image.png

兼容性:IE 9及以上支持,具体见下表

|Feature|Chrome|Firefox(Gecko)|IE|Opera|Safari|
|---|---|
|Basic support|5|4.0(2)|9|11.60|5|

问题14: hasOwnProperty有什么作用? 如何使用?

作用:判断一个属性是否是自身的属性,返回 true 或 false

var People = function(name){
    this.name = name
}

People.prototype.sayName = function(){
    console.log("My name is " + this.name);
}

var p = new People("cg")

console.dir(p)

p.hasOwnProperty("name")  //true
    //name 是 p 自己的属性,所以返回true
p.hasOwnProperty("sayName")  //false
    //sayName 是 p 的原型 __proto__ 里的属性,不是自己的属性,所以返回false
image.png

问题15:如下代码中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 的作用是实现了继承,Male 继承了 Person 的方法
原理是:call 改变了函数 Person 的执行上下文为 Male 
*/

问题16: 补全代码,实现继承

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

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

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

Male.prototype = Object.create(Person.prototype)  //实现继承

    //为了兼容 IE678 可以用以下三行代码实现继承,效果等同 Object.create
var Temp = function(){}
Temp.prototype = Person.prototype
Male.prototype = new Temp()

    //修改 constructor
Male.prototype.constructor = Male  
Male.prototype.getAge = function(){
    console.log(this.age);
};

var ruoyu = new Male('若愚', '男', 27);
ruoyu.getName();  //若愚

相关文章

  • 继承相关问题

    问题11:继承有什么作用? 概念:继承就是子类拥有父类的属性和方法, 作用: 父类中是更加通用的属性和方法,通过继...

  • 继承相关问题

    1、继承有什么作用? 在一个基于类的语言(如Java)中,继承(inheritance)提供两个有用的服务。首先,...

  • JavaScript的继承相关问题

    继承有什么作用? 继承可以让子类拥有父类的方法和属性,然后在这个基础上进行方法和属性调用,可以提高代码的复用性和效...

  • JS继承的相关问题

    构造函数、原型对象和实例之间的关系? 每个构造函数都有一个 prototype 属性指向原型对象,原型对象中有一个...

  • this_原型链_继承相关问题

    在函数被直接调用时this绑定到全局对象。在浏览器中,window 就是该全局对象,函数调用模式this指向win...

  • 原型链和继承相关问题

    1、有如下代码,解释Person、 prototype、proto、p、constructor之间的关联。 关联:...

  • 继承相关

    Q:子类继承父类时,重写的变量如何继承?A:重写变量时,变量会在运行时进行类型检查,属于哪个对象就为该对象的变量值...

  • 2017-03-20 C++阶段

    Task List 1. 植物生长问题改写成继承方法 2. 学习多继承友元相关知识 Summary 1. 植物生长...

  • JS this_原型链_继承 相关问题

    this 1,apply、call 、bind有什么作用,什么区别 apply/call:调用一个函数,传入函数执...

  • 继承

    最近在社区进行法律咨询时,关于继承的相关问题越来愈多,下面就有关继承的法律问题整理如下: 第一部分 关于继承权的概...

网友评论

      本文标题:继承相关问题

      本文链接:https://www.haomeiwen.com/subject/thrkxxtx.html