2012-02-15 67 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

你应该得到一些错误类型为Object对象默认不 – Esailija 2012-02-15 14:33:11

+0

另外'a.prototype.ok = set_test(文本)有原型属性;'将使'ok'等于返回未定义的'set_test'的值。 [Here](http://jsfiddle.net/LszV8/)有点不同。 – Chad 2012-02-15 14:33:58

+4

你想要做什么? – 2012-02-15 14:35:16

回答

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']不起作用。因为“this”不是“a”。你应该在对象a下定义方法set_test - 然后它将工作。

我建议您检查Mootools文档 - 有更好的对象模型语法。您还可以检查MooTools的源得到更详细的回答你的问题和JS对象模型

1

我觉得整个代码是错误的。

您可以看到,在JavaScript中,函数是对象,您可以随意传递它们。执行上下文(this)取决于您调用函数的方式。

如果您将函数存储在对象的属性中,然后通过调用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' 
相关问题