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.prototype。Object.prototype 位于原型继承链的顶端:日期对象、数组对象和 Person 对象都继承自 Object.prototype。
原型链
js中每个对象都有__proto__属性,对于函数对象才有prototype属性。
对于函数对象的prototype属性中又有constructor和__proto__属性
其中Object.prototype 的
__proto__ 属性是一个访问器属性(一个getter函数和一个setter函数), 暴露了通过它访问的对象的内部[[Prototype]] (一个对象或 null)。在MND中文文档中已不推荐使用,推荐使用Object.getPrototypeOf()方法返回对象的原型。