重构原型对象的方式:自己新开辟一个堆内存,存储我们公有的属性和方法,把浏览器原来给Fn.prototype开辟的那个替换掉
1.只有浏览器天生给Fn.prototype开辟的堆内存里面才有constructor,而我们自己开辟的堆内存没有这个属性,这样constructor指向就不是Fn而是Object,为了和原来的保持
一致,我们需要手动的增加constructor的指向
function Fn(){ this.x = 100 } Fn.prototype = { constructor: Fn, a: function () {}, b: function () {} } var f1 = new Fn; f.a() f.b()
2.用这种方式给内置类增加公有的属性
给内置类增加数组去重的方法
Array.prototype.unique = {
constructor: Array,
unique: function () {}
}
我们这种方式会把之前已经存在于原型上的属性和方法替换掉了,所以我们用这种方式修改内置类的话,浏览器是个屏蔽掉的
但是我们可以一个个的修改内置的方法,当我们通过下述方式在数组的原型上增加方法。如果方法名和原来内置的重复了,会把人家内置的修改掉,我们以后再内置类的原型上增加方法,命名都需要加特殊前缀
Array.prototype.sort = function () {
console.log("ok");// this->ary 我们当前要操作的这个数组
}
var ary = [1,2,3,2,3,4,5];
ary.sort()
console.log(ary)