javaScript 创建新对象的过程

1 function Mother(lastName){
2   this.lastName = lastName
3 }
4 
5 var son = new Mother('Da')

1.创建一个新对象:son

2.新对象会执行[[prototype]]连接:son.__proto__ = Mother.prototype (这里prototype是对象的属性,默认指向自己;__proto__是实例的属性,指的是创建该实例的对象)

3.新对象和函数调用的this会绑定起来:Mother.call(son,'Da')

4.执行构造函数中的代码:son.lastName

5.若函数没有返回值,那么就会自动返回这个新对象

上面的代码等同于:

1 function Mother(lastName){
2   this.lastName = lastName
3   return this
4 }
5 
6 var son = Mother('Da')

可以看到没有用new关键字,但是mother中多了返回this,相等于返回了一个新对象,这种写法也是可以的。

 

关于原型对象prototype,是对象的隐藏属性,在创建对象实例的时候,这个属性也在实例当中,上面的代码son.__proto__ ===    mother.prototype 也可以证实这一点。

关于原型链,这里有两个对象A和B,A有属性a,b是B对象创建的实例,此时若想实例b来访a属性,则需要A,B对象建立联系,B.prototype === new A(),让B的原型指向A,B创建的实例就可以使用A的属性。

 

最后说一下关于this绑定

this在函数中声明默认绑定到函数所在的作用域,一般就是window这个全局对象。

隐式绑定:在对象中用this便会指向对象本身

硬绑定:用call()方法来绑定要调用的对象,可以修改this指向

构造函数绑定:实例化后的实例调用方法会绑定自身实例对象

在严格模式中this会变成undefined

posted @ 2021-12-23 21:44  凉之光ca  阅读(217)  评论(0)    收藏  举报