new关键字 原理实现

206 阅读1分钟

new实例对象原理实现

function Info() {
    this.name = 'echo';
    this.age = 6
}

var  a = new Info()
console.log(a) // Info {name: "echo", age: 6}

相对于内部进行了以下操作:

function InfoTwo() {
    this.name = 'echo'
}

var b = new Object();
InfoTwo.call(b)
b.__proto__ = InfoTwo.prototype;
console.log(b) // InfoTwo {name: "echo"}

构造函数、实例、原型对象、原型链

构造函数

在JavaScript中,用new关键字调用的函数被定义为构造函数,建议构造函数的声明首字母大写,以便区分构造函数和普通函数。

实例

通过new关键字 new出来的称为实例对象

原型对象

所有 JavaScript 对象都从原型继承属性和方法 日期对象继承自 Date.prototype。数组对象继承自 Array.prototype。Person 对象继承自 Person.prototypeObject.prototype 位于原型继承链的顶端:日期对象、数组对象和 Person 对象都继承自 Object.prototype

原型链

js中每个对象都有__proto__属性,对于函数对象才有prototype属性。

image.png 对于函数对象的prototype属性中又有constructor和__proto__属性

image.png 其中Object.prototype 的 __proto__ 属性是一个访问器属性(一个getter函数和一个setter函数), 暴露了通过它访问的对象的内部[[Prototype]] (一个对象或 null)。在MND中文文档中已不推荐使用,推荐使用Object.getPrototypeOf()方法返回对象的原型。