从对象属性定义中调用对象方法

时间:2011-01-01 23:29:45

标签: javascript

我试图从一个对象(同一个对象)属性定义调用一个对象方法无济于事。

var objectName = {
     method   :   function() {
          return "boop";
     },
     property :   this.method()
};

在这个例子中,我想将objectName.method(“boop”)的返回值赋给objectName.property。

我已经尝试了objectName.method()method()window.objectName.method()以及所有这些的括号表示变体,例如。 this["method"],没有运气。

6 个答案:

答案 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(); }
};