这种奇怪的行为
The strange behavior of this
这里有这样的代码,我不明白为什么输出"Hello"?这个想法是g: bind (f, "Hello")
应该返回一个包装函数,该函数f
"Hello"的上下文中调用该函数。因此,this
函数f
应指向global object
。
function bind(func, context, args) {
var bindArgs = [].slice.call(arguments, 2); // (1)
function wrapper() { // (2)
var args = [].slice.call(arguments);
var unshiftArgs = bindArgs.concat(args); // (3)
return func.apply(context, unshiftArgs); // (4)
}
return wrapper;
}
function f() {
alert( this );
}
var user = {
g: bind(f, "Hello")
}
user.g();
不,上下文不会是全局上下文,而是字符串"Hello"。 上下文是bind()
函数的第二个参数,因此当调用函数"f"时
this
的值。在非严格模式下,如果作为 this 提供的值不是对象并且不是 null 或未定义,则会将其转换为对象。
因此,f 中的这个对象将是一个内部值为"Hello"的字符串对象,请参阅 ECMA-262 §10.4.3。
如果更改:
alert( this );
到以下内容,它显示了对象的内部类,因此可以判断它是什么类型的对象:
alert(Object.prototype.toString.call(this) ); // [object String]
你会得到[对象字符串]。
相关文章:
- 没有找到相关文章