分配和功能执行
assignment and function execution
我不确定为什么这会导致未定义的
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
console.log(typeof (f = foo.bar)());
知道吗?
您需要调用
bar
函数来获得baz
var foo = {
bar: function () {
return this.baz;
},
baz: 1
};
console.log(typeof (f = foo.bar()));
这取决于函数的调用方式。当调用f()
时,上下文被设置为Window
对象。由于没有全局变量baz
,函数f
将返回undefined
。
您可以通过在bar()
中记录this
来验证这一点。
var foo = {
bar: function() {
console.log(this);
return this.baz;
},
baz: 1
}
console.log('Called on foo', typeof foo.bar());
console.log('Called as `f()`', typeof(f = foo.bar)());
要更改函数的上下文,可以使用Function#call
、Function#apply
或Function#bind
。
var foo = {
bar: function () {
return this.baz;
},
baz: 1
};
console.log('Called as `f().call(foo)`', typeof (f = foo.bar).call(foo));
console.log('Called as `f().apply(foo)`', typeof (f = foo.bar).apply(foo));
console.log('Using bind', typeof (f = foo.bar).bind(foo)());
您希望找到什么?
如果您希望获得foo.bar中的"function",那么您应该像这样重写代码:
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
console.log(typeof (f = foo.bar));
我想你有一组括号,它不应该存在->就在"(f=foo.bar)"部分之后。
但是,如果你试图获得foo.baz的类型,那么你应该重写这样的代码:
var foo = {
bar: function(){ return foo.baz; },
baz: 1
}
console.log(typeof (f = foo.bar));
"this"是未定义的,因为它是singletone js对象,而不是类(函数)。
相关文章:
- 我想用Javascript网站在开放的Chrome浏览器上执行功能
- 如果在编辑中下拉值发生变化,如何执行功能
- 在周一上午8点至晚上7点之间执行功能
- 如何在ng中继器运行中执行功能
- 具有onclick功能的自定义复选框在实际切换复选框之前执行功能
- 基于条件执行功能
- 如何让chrome扩展在页面加载的后台执行功能
- 并行执行功能并等待其完成
- 必须点击两次按钮才能执行功能
- 在可过滤的剑道移动搜索框中键入时执行功能
- 故意暂停执行功能
- 当用户导航到特定部分时执行功能(地理位置)
- 必须单击按钮两次才能执行功能 - jQuery
- 在使用 react 和 material-ui 动态创建菜单项时,为什么 onTouchStart 会自动执行功能
- 如何在jQuery中单击两个按钮之一时执行功能
- 鼠标事件触发但未执行功能
- 如何在jquery中空闲10秒后执行功能
- 在Facebook分享后执行功能
- 如果文本框有焦点,按下特定键时执行功能
- 选择随机选项并执行功能