探索new 实例化对象时帮我们做了哪些工作
2018-08-27 本文已影响0人
zackxizi
1. 先看一个列子
Person = function (age=12) {
this.age = age
}
// 打印出来的值为undefined
console.log(Person.age);
// 但是通过new 运算符 就可以获取age值了
// 此时被实例化的ming = Person {age: 12}
ming = new Person(27)
// 这里就能获取到age=27了
console.log(ming.age)
那么为什么通过new之后就能通过键值对的形式获取age值呢
2. new 为我们创建实例做了哪些工作
new Person(27) = {
var obj = {}
obj.__proto__ = Person.prototype // 此时便建立了obj对象的原型链
var result = Person.call(obj, 27) // 通过call将Person的属性都复制到result
return typeof result === 'object' ? result : obj // 如果无返回值或者返回一个非对象值,则将obj返回作为新对象
}