function Person (phone, age) {
this.phone = phone;
this.age = age;
this.getPerson = function () { }
}
首先,我们定义一个Person
对象
let xiaoming = new Person("13888888888", 30)
这样,我们就得到了一个phone为"13888888888",年龄为30的对象实例
过程
创建一个新对象
首先我们创建了一个空对象obj
//利用new object()创建对象
const obj = new object()
//利用对象字面量创建对象
const obj = {}
将构造函数的作用域赋给新对象
每个对象都有一个隐形原型属性:__proto__
,这个属性指向的是构造函数的原型(js原型、原型链知识)
我们将这个空对象的__proto__
成员指向了Person函数对象prototype
成员对象
obj.__proto__ = Person.prototype
执行构造函数中的代码,为该新对象添加属性和方法
利用call
函数改变Person函数的内部this
指向为obj
let xiaoming = Person.call(obj,this.arguments)
//由于这里this是指向obj,可以把什么this.name/getName绑定到obj上.
返回新对象
判断构造函数是否有返回对象,如果返回对象的话new就返回那个对象(代码中的xiaoming),否则返回新创建的obj
return xiaoming instanceof Object ? xiaoming : obj