我有下面的代码片段:
var ret_ = function(x){
return x;
}
var make_cps=function(x,c_){
return c_(x);
}
var pred = {
_position: 0,
setPosition: function (i) {
_position = i
},
getPosition: function () {
return _position
},
_size: 0,
setSize: function (i) {
_size = i
},
getSize: function () {
return _size
},
_context: null,
setContext: function (x) {
_context = x
},
run: function () {
return function (c_) {
return make_cps(_position, c_);
}(ret_) == 2;
}
}
当我像下面那样运行时,它可以正常运行:
pred.setPosition(2)
pred.setSize(10)
pred.setContext(null)
var res = pred.run()
console.log(res) // Output: true
但是如果将
_position
替换为getPosition()
,则会发生错误,因为未定义getPosition()
。另外,如果我更改为this.getPosition()
,它说this
没有名为getPosition()
的成员。var pred = {
_position: 0,
setPosition: function (i) {
_position = i
},
getPosition: function () {
return _position
},
_size: 0,
setSize: function (i) {
_size = i
},
getSize: function () {
return _size
},
_context: null,
setContext: function (x) {
_context = x
},
run: function () {
return function (c_) {
return make_cps(this.getPosition(), c_); // gives Error here
}(ret_) == 2;
}
}
请有人对此问题有所了解。
最佳答案
您已经失去上下文。在放置this.getPosition()的位置,它将作为窗口对象返回。
如果您更改行以读取
return make_cps(pred.getPosition(), c_);
它将成功运行。
或者,您可以将运行功能更改为读取
run: function () {
var that = this;
return function (c_) {
return make_cps(that.getPosition(), c_);
}(ret_) == 2;
}
编辑:澄清
_position仍然有效而不是遭受相同问题的原因是,您实际上并没有在当前代码中设置prev._position。
setPosition: function (i) {
_position = i
},
getPosition: function () {
return _position
}
它在那里实际执行的操作是创建一个名为_position的新全局变量,并改为使用它。
该代码实际上应显示为:
setPosition: function (i) {
this._position = i
},
getPosition: function () {
return this._position
},