面试题 - 原型&继承&原型链

什么是原型?

说到原型就离不开构造函数,构造函数是用来创建对象时初始化对象的一种方法,每个构造函数都有prototype属性,该属性指向一个对象(原型对象)。原型对象上面所定义的方法和属性,都将被共享给其实例。每个实例的__proto__属性,指向的就是当前类/构造函数的prototype属性。

ES5 和 ES6 如何定义构造函数(类)?

ES5

```

function Person(name){

    this.name = name

}

// 在原型上添加方法,为实例对象所用

Person.prototype.sayName = function(){

    console.log(this.name)

}

let first_person = new Person('king')

first_person.sayName()     //    "king"

console.log(first_person)      //    Person:{name:"king"}

```

ES6

```

class Person{

    constructor(name){

        this.name = name

    }

    // 定义方法

    sayName(){

    console.log(this.name)

    }

}

let first_person = new Person('king')

first_person.sayName()     // "king"

console.log(first_person)      //    Person:{name:"king"}

```

如何继承(ES5 && ES6)?

ES5采用组合继承

1. 子类构造函数中调用父类的构造函数

```

function Child(obj){

    Parent.call(this,obj)

}

```

2. 根据父类的原型对象,创建子类的原型对象

```

Child.prototype = Object.create(Parent.prototype)

Child.prototype.constructor = Child  //修改构造器指向

```


ES6 : 关键字extends

class Child extends Parent{

    constructor(name,age){

        super(name)  //相当于把父类的constructor函数在此调用。 super还有很多种用法及属性,具体查看ES6文档

        this.age=  age

    }

}

什么是原型链?

当你访问某个实例对象的属性或者方法时,会触发其get方法,首先会在自身查找有无对应的属性或者方法,如果没有就去__proto__属性上查找,层层追述,一直到顶层Object停止,因为Object的__proto__是null。这个追述的过程就叫做沿着原型链查找。

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