在原型模式中,this常用的有两种情况:
在类中this.xxx=xxx;this->当前类的实例
某一个方法中的this->看执行的时候"."前面是谁this就是谁
1)需要先确定this的指向(this是谁)
2)把this替换成对应的代码
3)按照原型链查找的机制,一步步的查找结果
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 -> this.x 替换成f.x f.__proto__.getX();//-> this是f._proto_ -> f,_proto_.x->undefined Fn.prototype.getX();//->undefined f.getY();// 200; f.__proto__.getY();//300
练习:模拟slice方法
Array.prototype.mySlice=function(){};
考虑的情况:
slice(n,m);
slice(n);
slice()
n和m是负数
n<m
n和m的值超过数组的长度
n和m不是有效数字
要求不能使用数组内置的方法,比如添加不能使用push而使用ary[ary.length-1]=xxx
2.实现一个需求
(5).plus(10).reduce(2) 5+10-2
Number.prototype.plus=function(n){}
Number.prototype.reduce=function(n){}