我们经常说没有对象就new一个,说明通过new我们可以创建出一个对象。那在这个过程中还发生了什么呢? 今天我们就来聊一下这个过程,首先我们定义一个构造函数:
function Person(name, age) {
this.age = age;
this.name = name;
this.show = function () {
console.log('show');
};
}
Person.prototype.eat = function () {
console.log('我会吃');
};
然后我们new一下这个构造函数:
new Person()
上面代码总共会实现以下内容:
1、创建一个构造函数
2、new一个实例对象
3、实例对象拿到构造函数中的属性
4、实例对象可以调用构造函数原型中的方法。
接下来我们来详细拆分一下这里面的细节:
-
首先定义一个对象
obj var obj = {}我们打印一下这个对象到底长啥样:其实它就是一个普通的函数对象,构造函数指向了Object
-
将这个对象的原型指向构造函数的原型对象空间上
obj.__proto__=Person.prototype此时他已经继承了构造函数的原型对象的方法和属性,但是构造函数上的属性和方法还是拿不到。
-
最后一步就是这个this指向问题
我们将Person函数对象的this指针替换成obj,然后再调用Person函数,于是我们就拿到了构造函数上的所有属性和方法了。到这一步我们就实现了。