JavaScript 变量访问错误
javascript variable access error
我有下面的代码片段:
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
},
这是
设置一个全局变量_position
:
setPosition: function (i) {
_position = i
},
它不是pred
对象上的变量。
当您在此处访问它时:
run: function () {
return function (c_) {
return make_cps(_position, c_);
}(ret_) == 2;
}
您正在使用该全局变量。
如果要使用实例属性,则需要开始使用this
:
setPosition: function (i) {
this._position = i
},
run: function () {
var pred = this;
return function (c_) {
return make_cps(pred._position, c_);
}(ret_) == 2;
}
相关文章:
- 难以访问的JS环境中的语法错误
- Phonegap:获取访问令牌时出现LinkedIn登录错误
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- Jquery 脚本错误“访问被拒绝”
- D3 Json请求获取XmlHttpRequest错误:访问控制允许原点不允许原点为null
- 错误:访问属性“”的权限被拒绝;文件”;
- 未定义的错误访问安卓相机
- 使用AngularJS加载动态指令-错误:访问受限URI被拒绝
- 推特:仅应用程序身份验证错误访问控制允许原点不允许原点为null
- 错误:访问子域属性的权限被拒绝
- Ajax错误“;错误:访问被拒绝"在IE11中.窗XDomainRequest对象不可用
- 错误.访问iFrame中的PDF元素
- http 403错误(访问被拒绝)的CSS文件localhost
- Meteor: Facebook基本API调用错误:访问令牌
- 错误访问变量形式函数
- 错误:访问属性'的权限被拒绝;处理程序'
- SVG错误:访问属性'someFunction'权限被拒绝
- 错误:访问受限的URI被拒绝-同源策略
- AngularJs:发送到远程服务器的表单给出错误:访问受限URI被拒绝
- 错误---访问控制允许原点不允许原点空