我如何解决“;这个“;我的代码中的对象混淆
How do I address the "this" object confusion in my code
此代码来自Functional JavaScript一书,第32页:
var a = {name: "a", fun: function(){ console.log(this);}};
a.fun();
var bfun = function(){ console.log(this);};
var b = {name: "b", fun: bfun};
b.fun();
根据这本书,b.fun()
应该打印全局对象或其他对象,然而,在我的情况下,它打印的是对象b
。
这是书中的错别字还是我遗漏了什么?
这是本书中的一个错误,并在勘误表中进行了更正:
这本书声称,以下代码将导致对象:
var bFunc = function () { return this }; var b = {name: "b", fun: bFunc}; b.fun(); //=> some global object, probably Window
这是不正确的。事实上,b.fun()返回存储在变量b.this的语义是这样的,即当函数被调用,而不是在定义函数时调用。如果函数使用b.fun()或b'fun'调用,这被设置为b.
作者或编辑注意:这绝对是误导。更多合适的代码段是:
var bObj = {name: "b", fun: function(){ return this }}; bObj.fun(); //=> {name: "b", fun: function (){ return this }} var bFunc = bObj.fun; bFunc(); //=> some global object, probably Window
解释案文如下:
好吧,这可能令人惊讶。你看,当一个函数被调用时在对象的上下文中,其this引用指向对象本身。然而,当我后来将bFunc绑定到字段时bObj.fun,调用时其引用已更改为全局对象。在大多数编程语言中提供。。。
bfun(); // logs "Window" (or global object)
b.fun(); // logs "b"
单词this
总是指运行函数的对象。
当然,它是全局窗口obejct。请尝试考虑运行时状态。作用域是调用函数的人,而不是表达式。
以下代码将帮助您:
var a = {name: "a", fun: function(){ console.log(this);}};
a.fun();
var bfun = function(){ console.log(this);};
var b = new Function();
b.name="b";
b.fun=bfun;
b.fun();
相关文章:
- 面向对象的Javascript代码在IE7中不起作用
- JavaScript代码问题:我正在将对象转换为数组
- Angular:使用选择列表选择过滤代码中的对象
- 创建对象函数原型和代码是错误的
- 将代码转换为可重用对象
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- 分析云代码访问对象
- 为什么代码会指向window对象
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- AngularJS错误:请求的键的值不是对象.keys@[本地代码]
- 如何让我的正则表达式代码在我的dojo cellWidget对象上工作
- 解析服务器云代码保存对象
- 如何从给定的代码中获取JSON对象
- XMLHttpRequest 对象状态代码为 0
- Ace代码编辑器:缓存模式对象
- 当我运行代码时,我得到以下结果 []对象对象] [对象对象],但应该给我一个有序数组
- Javascript对象字符串值-在应该隐藏的时候呈现的HTML代码
- 未定义的类型,当我把我的代码对象Javascript AJAX
- Javascript 代码对象预期错误
- Javascript简单的代码对象和函数