84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
Object.prototype = { handle: function(){} }
与
Object.prototype.handle = function(){}
有什么区别?我在chrome控制台打出来看第一种生命方式没有constructor了
constructor
光阴似箭催人老,日月如移越少年。
肯定是有区别的第一种把一个对象引用给了Object的prototype,这样直接覆盖了原型本来就有的引用第二种是给Object的prototype加了一个handle的属性,并没有改变引用
第一种是直接给Object.prototype赋了一个新的值,引用了新的对象,将原来的Object.prototype抛弃了;第二种是给原来的Object.prototype对象指派了一个新的属性,并没有改变Object.prototype的引用。因为一个普通的对象是没有constructor属性的,constructor是function的构造器,所以你第一种方式给Object.prototype指定为一个普通的对象,当然就没有constructor啦。
函数fun建立后fun.prototype.constructor指向fun自身,constructor是prototype上的一个属性,你第一种方式直接把prototype指向另外一个对象,constructor自然是没有了。
fun
fun.prototype.constructor
prototype
第一种相当于完全重写了原型对象,是不会有constructor的,如果需要,需要自己显式指定
第二种只是在默认的原型对象上增加一个属性
肯定是有区别的
第一种把一个对象引用给了Object的prototype,这样直接覆盖了原型本来就有的引用
第二种是给Object的prototype加了一个handle的属性,并没有改变引用
第一种是直接给Object.prototype赋了一个新的值,引用了新的对象,将原来的Object.prototype抛弃了;第二种是给原来的Object.prototype对象指派了一个新的属性,并没有改变Object.prototype的引用。因为一个普通的对象是没有constructor属性的,constructor是function的构造器,所以你第一种方式给Object.prototype指定为一个普通的对象,当然就没有constructor啦。
函数
fun
建立后fun.prototype.constructor
指向fun
自身,constructor
是prototype
上的一个属性,你第一种方式直接把prototype
指向另外一个对象,constructor
自然是没有了。第一种相当于完全重写了原型对象,是不会有constructor的,如果需要,需要自己显式指定
第二种只是在默认的原型对象上增加一个属性