对象方法通常像这样声明和使用
points = {
first : function(){
return this.val[0];
}
};
points.val = [1,2];
points.first(); // returns 1
但为什么我不允许使用回调而不是声明的方法。
points.val = [1,2];
points.(function(){
return this.val[0];
})();
答案 0 :(得分:1)
在对象上调用方法包含两个步骤:
TypeError
)。 在第一个示例中,您的调用代码使用.
语法检索points
的属性,其中包含键first
。然后它执行返回的属性,这是一个匿名函数。
在第二个示例中,您尝试使用键查找对象:
(function(){
return this.val[0];
})
在JavaScript中,Object keys must be valid identifiers。 Function expressions不是有效的标识符,因此编译器会引发SyntaxError
。
如果您尝试使用动态定义的使用this
来引用points
的函数,则使用bind
:
(function() { return this.val[0] }).bind(points)()
答案 1 :(得分:1)
您可以通过在接受回调的点上定义函数
var points = {val:[1,2]};
points.func = function(callback){
callback.call(this);
}
并用
调用它points.func(function(){
return this.val;
})
您不能使用函数作为对象键,但可以向对象添加函数。您还可以在对象外定义函数,并使用.call
或.apply
方法
function val(){
return this.val;
}
val.call(points);
答案 2 :(得分:0)
我认为你要做的就是为积分做一个吸气剂/设定者。
points={};
// pass in an array to set points or pass a callback to retrieve them!
points.val = function (points){
//test if points is a callback return points to callback
if (typeof points==="function") return points(this._points);
// or set the points with the passed in value
this._points=points;
};
//set the points
points.val([1,2])
//get points into callback
points.val(function(e){
return e[0];
});