<script>
//在原型模式中,this常用的有两种情况:
//在类中this.xxx=xxx;this->当前类的实例
//某个方法中的this->看执行的时候"."前面是谁this就是谁
//1)需要确定this的指向
//2)把this替换成对应的代码
//3)按照原型链查找机制,一步步查找
function Fn() {
this.x = 100;
this.y = 200;
this.getY=function () {
console.log(this.y);
}
}
Fn.prototype = {
constructor:Fn,//一定记得重构时设置constructor
y:300,
getX: function(){
console.log(this.x);
},
getY: function () {
console.log(this.y);
}
};
var f = new Fn;
f.getX();//->100;
f.__proto__.getX();//->undefined//this是f.__proto__->console.log(f.__photo__.x)->undefined
Fn.prototype.getX();//->undefined
f.getY();//->200
f.__proto__.getY();//->300
//在内之类的原型上扩展我们的方法
Array.prototype.myUnique = function () {
var obj = {};
for (var i = 0; i <this.length;i++) {
var cur = this[i];
if(obj[cur]==cur){
this[i]=this[this.length-1];
this.length--;
i--;
continue;
}
obj[cur] = cur;
}
obj = null;
return this;//目的是为了实现链式写法
}
var ary = [11,11,22,33];
// ary.myUnique();
// console.log(ary);
//链式写法:执行完数组的一个方法可以紧接着执行下一个方法
//原理:
//首先sort方法是Array.prototype上的公有方法,而数组ary是Array这个类的一个实例,所以ary可以使用sort方法->只有数组才能使用Array原型上电仪的属性和方法
//sort执行完成的返回值是一个排序后的"数组",可以继续执行reverse
//reverse执行完成后的返回值也是一个数组,可以继续执行pop
//pop执行完成的返回值是被删除的那个元素,不是一个数组
//pop之后不可继续执行链式写法,继续执行会报错
ary.sort(function (a,b) {
return a - b;
}).reverse().pop();
// ary.__proto__.myUnique();//IE下禁止使用__proto__
Array.prototype.myUnique();//this-> Array.prototype.
</script>
原型链模式拓展2
最新推荐文章于 2024-07-09 10:26:27 发布