<script>
//批量设置原型上的共有的属性和方法
//1起一个别名
var pro = Fn.prototype;//把原来原型指向的地址复制给我们的pro,现在他们操作的是同一个内存空间
function Fn() {
this.x = 100;
}
pro.getX = function () {
console.log(this.x);
};
pro.getY = function () {
console.log(this.x);
};
pro.getZ = function () {
console.log(this.x);
};
var f1 = new Fn;
//2重构原型对象的方式->自己新开辟一个堆内存,存储我们共有的属性和方法,把浏览器原来给的Fn.prototype给替换掉
function Fn() {
this.x = 100;
}
Fn.prototype = {
constructor : Fn,
a:function () {
},
b: function () {
}
};
var f = new Fn;
//1.只有浏览器天生给Fn.prototype开辟的堆内存里面才有constructor,而我们自己开辟的这个堆内存没有这个属性
//这样constructor指向就不在是Fn而是Object了 为了和原来的保持一致,我们需要手动增加constructor
console.log(f.constructor);//->Object 手动增加上后指向Fn
//2.用这种方式给内之类增加共有的属性
//给内置类Array增加数组去重的方法
// Array.prototype.unique = function () {
// };
// Array.prototype ={这样写是不可以的
// constructor:Array;
// unique:function(){
// }
// };
// console.dir(Array.prototype);
//我们这种方法会把之前已经存在于原型上的属性和方法给替换掉,所以我们中这种方法修改内置类的话,浏览器是给屏蔽掉的
//但是我们可以一个个修改内置的方法,当我们通过下述方式在数组的原型上增加方法,如果方法名和原来内置的重复了,会把人家内置的修改掉-->我们以后在内置类的
//原型上增加方法,命名都需要加特殊的前缀
Array.prototype.sort = function () {
console.log("okkkkk");
};
var ary = [1,2,2,1,2,3,4,2,1,3];
ary.sort();
console.log(ary);
</script>
原型链模式拓展1
最新推荐文章于 2022-07-24 15:57:21 发布