2012-02-15 7 views
0

Я новичок в JavaScript и поэтому не понимаю его объектную модель, но, как я понял, мне нужно что-то делать.Задайте функцию только для одного экземпляра

function set_test(text) { this['test'] = text; }; 
a = {}; 
text = 'ok'; 
a.prototype.ok = set_test(text); 
alert(a['test']); #Should be 'ok' 
text = 'fail'; 
a.ok; 
alert(a['test']); #Should be 'ok' 

Может кто-нибудь сказать, что здесь не так?

+0

Вы должны получить некоторый тип ошибки, как объекты объектов не имеют прототип свойства по умолчанию – Esailija

+0

Кроме того, 'a.prototype.ok = set_test (текст),' 'бы ok' равно возвращению значение 'set_test', которое является' undefined'. [Здесь] (http://jsfiddle.net/LszV8/) немного отличается. – Chad

+4

Что вы пытаетесь сделать точно? –

ответ

1

объекты не имеет прототипа по умолчанию, и a.prototype.ok = set_test(text); бы ok равных возвращаемого значению set_test() которое undefined.

Попробуйте сделать это this way вместо:

function set_test(text) { this['test'] = text; }; 
var a = { 
    ok: set_test 
}, 
text = 'ok'; 

a.ok(text); 
alert(a['test']); //Should be 'ok' 

text = 'fail'; 
a.ok(text); 
alert(a['test']); //Should be 'fail' 
0

Я думаю, что в функции set_test этот ['test'] не будет работать. beacause «это» не «а». Вы должны определить метод set_test в объекте a - тогда он будет работать.

Я рекомендую вам проверить документы Mootools - существует намного лучший синтаксис объектной модели. Вы также можете проверить источник Mootools, чтобы получить более подробный ответ на свой вопрос и JS объектной модель

1

Я думаю, что весь код неправильно.

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

Если вы храните функцию в свойстве объекта и затем вызываете ее, вызывая obj.fn(), контекст выполнения установлен в obj.

Также обратите внимание, что вы не должны вызывать функцию при назначении ее как свойства объекта.

function set_test(text) { this['test'] = text; } 

var a = {}; 
a.ok = set_test; // see, no invocation 

a.ok('abc'); 
alert(a['test']); // alerts 'abc' 

a.ok('def'); 
alert(a['test']); // alerts 'def'