这两条线的区别
Difference between these two lines?
this.loc++
obj.loc++
在第四行?
var carlike = function(obj, loc) {
obj.loc = loc;
obj.move = function() {
this.loc++;
};
return obj;
};
var amy = carlike({}, 1);
amy.move();
这个视频中对此进行了一些解释,但我仍然不清楚这两者之间的区别。 https://www.youtube.com/watch?v=9oi0NY8Pen8
在这个视频中,有人说当我们使用 this.loc++
,每次调用move
时,它都会绑定到一个新值。但是当我们使用 obj.loc++
时,每次我们调用 car carlike
函数时,都会创建一个新的闭包范围,因此 obj
变量将始终只引用一个 car 对象。什么意思?
如果使用 this
,则在调用它时设置其值:
amy.move(); // Called with this === amy
amy.move.call(foo); // Called with this === foo
如果你使用obj
,它将永远是obj
的,与move
的调用方式无关。
来自Udacity Object Oriented JavaScript课程的视频。在讲师教我们this
关键字之前的一些课程。
this
是指函数/方法的对象/调用方。通常是dot
剩下的object
。(在答案中@Oriol this
被覆盖在特殊call
函数中作为参数。
这确实是区别,@Oriol是对的。
首先,您已经正确理解,无论您使用 this.loc
还是obj.loc
,结果都没有区别。
对您的问题的简短回答是,使用 obj.loc++
而不是 this.loc++
没有真正的直接优势或劣势。
说明:您应该了解 2 个重要的上下文this
。
- 全局上下文
- :在全局执行上下文(在任何函数之外(中,这是指全局对象,无论是否处于严格模式。既然不是你的情况,那就不要挖了。 函数
- 上下文:在函数内部,此值取决于函数的调用方式。在非严格模式下,this 的值必须始终是一个对象,因此它默认为全局对象。在严格模式下,此值将保持在进入执行上下文时设置的任何值。如果未定义,则保持未定义状态。它也可以设置为任何值,例如 null 或 42 或"我不是这个"。
从 MDN 阅读本文以获取更详细的解释。
现在,在您的情况下,无论您是在严格模式还是非严格模式下运行,无论您是使用 this
还是obj
您都会看到相同的结果,因为当您使用 this
时,它会再次成为您的函数上下文,您可以在this
上访问loc
。
现在,谈到约定,假设有另一个名为 loc
的全局变量,当您在 carlike
函数中使用 this.loc++;
时,this
仍然会在函数上下文中运行并将增加carlike
函数的loc
,但至少对于新手来说,无论是增加全局loc
还是局部loc
,可读性都很差。
因此,总结使用obj.loc++;
是一个更好的主意。
- 为什么我的画布上只显示两条线
- D3 - 在两个不与其他对象相交的对象之间绘制一条线
- 使用 D3 的两条线之间的阴影区域
- Snap.如何始终用一条线连接两个对象
- 在画布上移动两条以上的箭头线
- 在拉斐尔JS的两个百分点之间画一条线
- 如何使用整数值(不是向量)计算两条线之间的度数
- 试图通过两条线获得自定义和无限的猫头鹰轮播
- 如何设置角度谷歌折线图的样式,使其在同一条线上有两种样式
- JS在两个或多个点之间画一条线
- 使用d3来遮挡两条线之间的区域
- D3:是否可以根据阈值绘制一条线并将其分配给两个轴
- 我怎么知道两条线是否重叠?
- Touchmove在画布上绘制两条线而不是一条线
- 小叶中两条线的交点
- 广告画廊.用两条线表示
- 如何在线形图上的两条线之间使用chart.js version2
- 这两条线的区别
- 如何使图表JS中的两条线变粗
- 高图表:显示两条线而不是一条线