原型模式
在原型模式中this常用的有两种情况:
//this.xxx=xxx;当前类的实例;
//某一个方法中的this,看谁执行的this是谁
function Fn (){ this.x = 100; this.y =200; this.getX = function() { console.log(this.x) }; } 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 f.prototype.getX();->undefined
给内置类的原型扩展方法
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 = [.......]; ary.myUnique().sort(function(a,b){return a-b});
所有的函数数据类型都天生自带一个属性:prototype,它存储的值是一个对象数据类型,浏览器默认为它开辟一个堆内存;
在浏览器给prototype默认开辟的这个对内存上有一个默认的属性:constructor,只想当前类本身;
每一个对象数据类型(普通对象,数组,正则,实例)都天生自带一个属性__proto__指向当前实例所属累的原型;