原型链模式(拓展)

原型链模式(拓展)

this和原型

在原型模式中,this常用的两种情况:
在类中this.xxx=xxx;this>>当前类的实例

某一个方法中的this>>看执行的时候“.”前面是谁,this就是谁
1)需要先确定this的指向(this是谁)
2)把this替换成对应的

案例五
function Fn(){
this.x=100;
this.y=200;
this.getY:function(){
console.log(this.y);
};
}

Fn.prototype={
constructor:Fn,
y=300,
getX:function(){
console.log(this.x);
},
getY:function(){
console.log(this.y);
}
};
var f=new Fn;
f.getX();
>>100>>console.log(f.x)
f.__proto__.getX();
>>this是__proto__>>console.log(__proto__)>>undefined
f.getY();
>>200
Fn.prototype.getX();
>>undefined
f.__proto__.getY();
>>300
Array.prototype.myUnique=function(){
>>this
};
var ary[];
ary.myUnique();
 >>this是ary
Array.prototype.myUnique();>>this是Array.prototype

在内置类的原型上拓展方法

案例六
Array.prototype.myUnique=function(){
// >>this>>ary
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;
};
var ary[10,12,13,11,16,18,31,21,10];
普通:
ary.sort(function(a,b){
return a-b;
});
ary.reverse();
ary.pop();

链式:

执行完数组的一个方法可以紧接着执行下一个方法

原理:
ary为什么可以使用sort方法?

因为sort是Array.prototype上的公有的方法,而且数组ary是Array这个类的一个实例,所以ary可以使用sort方法
数组才能使用Array原型上定义的属性和方法
sort执行完成的返回值是一个排序后的“数组”,可以继续执行
reverse执行完成的返回值是一个数组,可以继续执行
pop执行完成的返回值是被删除的那个元素,不是一个数组,所以再执行push报错

链式:
ary.sort(function(a,b){
return a-b;
}).reverse().pop();
ary.myUnique();
案例七
Array.prototype.myUnique=function(){
// >>this>>ary
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[10,12,13,11,16,18,31,21,10];
ary.myUnique();.sort(function(a,b){
return a-b;
});
console.log(ary);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值