- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正试图通过在线视频类(class)来掌握 Javascript 的概念,我在下面看到了这个示例。 https://www.youtube.com/watch?v=9oi0NY8Pen8
老师先用了这个例子
var carlike = function(obj, loc) {
obj.loc = loc;
obj.move = function() {
this.loc++;
};
return obj;
};
var amy = carlike({}, 1);
amy.move();
然后将carlike函数改成
var carlike = function(obj, loc) {
obj.loc = loc;
obj.move = function() {
obj.loc++;
};
return obj;
};
说 我们可以使用 obj 而不是引用每次调用 move 时绑定(bind)到新值的参数 this
this
如何绑定(bind)到新值。使用 obj 如何防止这种情况。
最佳答案
当您调用 amy.move()
时, 在 move
内“变量”this
获取 amy
的值, 这是一个对象。如果move
包含代码 this.loc++
, 那么属性的值 amy.loc
将递增。
但是,您可以通过其他方式调用该函数。例如:
var func = amy.move; // copies reference to function into variable func
func(); // "this" is unspecified
在上面的例子中,因为this
未指定,默认为 window
(在非严格模式下)或 undefined
(在严格模式下)。
或者:
var bill = { loc: 4 };
amy.move.call(bill); // "this" is bill, not amy
另一方面,如果 move
函数包含代码 obj.loc++
, 那么它将始终递增 loc
同一对象:即传递给 carlike
的对象当 move
的这个实例已创建:
var amy = carlike({}, 1);
var bill = { loc: 4 };
amy.move.call(bill); // "this" is bill, not amy
console.log(amy.loc); // prints 2
console.log(bill.loc); // prints 4
move
函数在创建时变为 closure在局部变量上 obj
在 carlike
内.
在这个小例子中,这样做并没有什么特别的好处,但闭包通常是一种强大的技术。
关于javascript - 为什么在此示例中放弃 'this' 是有益的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29442982/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在查看另一个开发人员提交给项目的差异,他们有很多代码可以执行 !! .事实上,这似乎是他们实现 boolean getter 和 setter 的标准模式。他们已经实现了他们的代码: - (BOO
假设我有一个显示博客文章的网站。在这个网页上有一个评论部分,但它在页面加载时隐藏了。但是,评论计数会在其位置显示给用户,如果用户单击该计数,则会进行 ajax 调用以加载所有评论。 通常我会做一些额外
一般推荐使用ConfigureAwait(false)在不需要上下文的情况下等待异步调用时。只是想知道使用 ConfigureAwait(false) 有什么好处吗?在 Azure 函数中。 Azur
我是一名优秀的程序员,十分优秀!