Javascript [this] 关键字与 new 绑定(bind)

标签 javascript this

看书时You Don't Know JS: this & Object Prototypes

我发现这个关于this的例子绑定(bind):

function foo(something) {
  this.a = something;
}

var obj1 = {
 foo: foo
};

var obj2 = {};

obj1.foo( 2 );
console.log( obj1.a ); // 2

obj1.foo.call( obj2, 3 );
console.log( obj2.a ); // 3

var bar = new obj1.foo( 4 );
console.log( obj1.a ); // 2
console.log( bar.a ); // 4

我不明白为什么执行 new obj1.foo(4) console.log(obj1.a) 后打印2而不是4 。如果我评论行 obj1.foo(2)上面日志的结果是 undefined .

最佳答案

因为任何函数都可以是构造函数。想象一下,如果您单独使用 foo:

var obj3 = new foo(3);

您也希望得到一个类似的对象{ a: 3 },对吗?

即使该函数附加到其他东西上,它仍然有效。每次使用 new 时,您都会创建一个新对象,而不是更改现有对象。

在第一个实例中,您将函数用作方法:

obj1.foo(2);

在本例中,上下文设置为 obj1,因为它是调用它的上下文。但是,当您使用 new 时,会创建一个全新的对象,并且该新对象将用作上下文。

关于Javascript [this] 关键字与 new 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235576/

相关文章:

javascript - 字符串化事件对象有效,但实际上是空的

java - 我正在尝试在 java 中使用和学习关键字 "this"。在我的代码中出现错误

jquery - 稍后使用 $(this) 不可能,有什么替代方法?

javascript - "This"变成 "window"JavaScript

javascript - jQuery selector 一定是字符串和0到9之后的数字吗?

javascript - 如何在 JavaScript 中检测 Mac OS X 版本

javascript - jQuery Ajax 回调无法识别 $(this) 对象

javascript - 如果我知道按钮的名称,如何从按钮获取 id - javascript

javascript - React JS (JSX) div 不渲染,除非将文本添加到 div

javascript - 使用一些图表库的javascript中的ECG曲线