我试图从一个对象(同一个对象)属性定义调用一个对象方法无济于事。
var objectName = {
method : function() {
return "boop";
},
property : this.method()
};
在这个例子中,我想将objectName.method(“boop”)的返回值赋给objectName.property。
我已经尝试了objectName.method()
,method()
,window.objectName.method()
以及所有这些的括号表示变体,例如。 this["method"]
,没有运气。
答案 0 :(得分:5)
在初始化this
时,不会引用包含属性method
(尚未初始化)的对象,而是引用curent上下文 - 并且因为它没有method
属性,所以得到一个TypeError。
如果它是您想要的自定义getter
,那么您可能会考虑在javascript中使用getter和setter - 在ES5之前ECMAscript不支持它们,但许多引擎support them nonetheless。
答案 1 :(得分:1)
我看不出你为什么要这么做?
如果您不想使用方法名称,为什么不使用getter。
var objectName = {
method : function() {
return "boop";
},
property : function () {
return this.method();
}
};
答案 2 :(得分:0)
/* overwrites the `property` function with a the set value
* the first time it's called. From then on it's just a
* property
*/
var objectName = {
method: function(){ return 'boo'; },
property: function(){
var returnValue = this.method();
this.property = returnValue;
return returnValue;
}
};
/* or */
var objectName = {
property: ( function(){ return 'boo'; }() );
};
/* this evaluates the anonymous function within
* the parenthetical BEFORE the definition of
* objectName leaving only the returned value
* to be set to property
*/
/* or */
var objectName = {
method: function(){
this.property = 'boop';
return this.property;
}
}
/* calling the method to create/set the property
* for objectName to the evaluated value
*/
/* or */
var objectName = {
data: {
property: 'boop'
},
property: function( value ){
if ( value ) this.data.property = value;
return this.data.property;
}
};
/* the last one, I believe, is a neat way of handling
* both set and get stealing the concept from my use
* with JQuery.
* set = objectName.property( 'boo' );
* get = objectName.property();
*/
答案 3 :(得分:0)
另一种方法:
var objectName = {
method : function() {
return "boop";
}
};
$.extend(objectName, {
property : objectName.method()
})
objectName在调用'方法'。
时已初始化答案 4 :(得分:0)
它对我有用,如下:
var objectName = {
method : function() {
return "boop";
},
property : objectName.method()
};
答案 5 :(得分:-1)
你不会去:
var objectName = {
method : function() { return "boop"; },
property : function() { return this.method(); }
};