日期:2012-5-16 来源:GBin1.comjavascript
当你定义javascript方法的时候,会产生一些预约义的属性,其中一个比较让人迷惑的属性就是prototype。在本文中,咱们将详细介绍什么是Prototype,而且为何使用prototype。java
prototype属性初始时是一个空的对象,能够添加对象 ,你能够添加任何对象到它里面去。编程
var myObject = function(name){ this.name = name; return this; }; console.log(typeof myObject.prototype); // object myObject.prototype.getName = function(){ return this.name; };
在以上这段代码中,咱们建立了一个方法,可是若是咱们调用myObject(),将会返回window对象,由于它被定义在全局范围中。 this将会返回全局对象,由于没有被实例化。浏览器
console.log(myObject() === window); // true
每个javascript中的对象都有一个秘密属性。 app
在咱们继续以前,我想讨论一下决定prototype工做方式的“秘密”链接。this
每个javascript对象在定义或者实例化的时候都会添加一个秘密的属性,叫__proto__,这决定了prototype链如何被访问。然而,在你的应用中访问这个__proto__属性绝对不是一个好主意,由于不是全部浏览器均可访问。spa
__prototype__ 属性在一个对象的prototype中不该该被弄混了, 由于它有两个分开的属性;意味着他们都是手拉手来使用的。对于弄清楚这个很重要。由于最开始的时候确定比较使人迷惑。 那究竟什么意思呢? 这里咱们解析一下。 当咱们建立myObject方法时,咱们定义了一个Function类型的对象。prototype
console.log(typeof myObject); // function
若是你不知道的话, Function是一个javascript预约义的对象,这样的话,拥有本身的属性(例如,length和arguments)和方法(例如,call和apply)。这意味着,在javascript的引擎中,这里有相似以下代码的部分:code
Function.prototype = { arguments: null, length: 0, call: function(){ // secret code }, apply: function(){ // secret code } ... }