2013-03-28 76 views
0
var Foo = (function() { 

    var cls = function() { 
     this.prototype = { 
      sayhi: function() { 
       alert('hi'); 
      } 
     }; 
    }; 

    cls.staticMethod = function() {}; 

    return cls; 

})(); 

var f = new Foo(); 

爲什麼我不能訪問我的sayhi方法? this是否參考cls變量?在變量實例上訪問原型方法

回答

1

您試圖設置prototype屬性實例cls。你真正想要做的是設置的cls本身prototype屬性:

var Foo = (function() { 

    var cls = function() {}; // Constructor function 

    cls.prototype = { // Prototype of constructor is inherited by instances 
     sayhi: function() { 
      alert('hi'); 
     } 
    }; 

    return cls; 

})(); 
+0

很好的回答。你知道我在這裏錯過了什麼http://jsfiddle.net/6Wqsm/3/?輸出是'cls {}, cls {sayhi:function}',但不是都使用相同的原型,因此應共享'sayhi'函數? – 2013-03-28 09:45:57

+0

不,因爲每次調用'cls'時原型都會覆蓋一個新對象。在構造函數中設置原型會導致各種問題。例如,在你的例子中嘗試'window.f instanceof foo' - 它會返回'false'。 – 2013-03-28 09:58:53

+0

哦,我沒有考慮覆蓋部分。謝謝。 – 2013-03-28 10:01:39