2013-03-28 3 views

ответ

1

Вы пытаетесь установить prototype на каждые экземпляр из cls. То, что вы на самом деле хотите сделать, это установить prototype свойство самого cls:

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'? –

+0

Нет, потому что прототип перезаписывается новым объектом каждый раз, когда вы вызываете 'cls'. Установка прототипа внутри конструктора вызовет всевозможные проблемы. Например, попробуйте 'window.f instanceof foo' в вашем примере - он вернет' false'. –

+0

О, я не думал о перезаписываемой части. Спасибо. –

Смежные вопросы