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

浙公网安备 33010602011771号