2010-09-21 2 views
0

Это что-то тривиальное, о котором я забыл. Возможно, дубликаты - я искал немного, нашел похожие, но не мог найти их краткими.Как установить свойство объекта в функции прототипа (проблема с областью)?

String.prototype.test = function(){this.bar = this.length + 2;} 

    var str = "foo"; 
    str.test(); 

    console.log(str);       // foo 
    console.log(str.bar);      // undefined 

Довольно уверен, что он должен делать с this оказаться в ловушке закрытия.

ответ

0

Имеет отношение к тому, как вы создаете свою строку в этом случае. Попробуйте:

var str = new String("Foo"); 

, и вы найдете его магически работающим. : -]

Смотрите пример на: http://jsbin.com/odozo3/edit

+0

Я нашел это право, прежде чем вы ответили, что. :) kudos to – vol7ron

+0

Я смутно помню, что ключевое слово 'new' необходимо для прототипов. Любые идеи о том, как заставить его работать без указания типа объекта (например, с помощью только 'var str =" foo ";')? – vol7ron

+0

Простой ответ @ vol7ron: Вы не можете. – Erik