Javascript “与”的区别是什么;这";和ObjectName(例如:Person)?
有人能告诉我下面两种代码的区别吗:Javascript “与”的区别是什么;这";和ObjectName(例如:Person)?,javascript,Javascript,有人能告诉我下面两种代码的区别吗: var-Person={ 汽车:[], init:function(){ 这个.Cars=[]; } };在第二个代码中,init将始终在Person上创建(或重新分配)一个Cars属性。另一方面,在第一个代码中,创建Cars属性的对象取决于调用上下文。例如,如果将init函数放在某个其他对象上,然后调用它,则该其他对象将发生变化: var-Person={ 汽车:[], init:function(){ 这个.Cars=[]; } }; var my
var-Person={
汽车:[],
init:function(){
这个.Cars=[];
}
};代码>在第二个代码中,init
将始终在Person
上创建(或重新分配)一个Cars
属性。另一方面,在第一个代码中,创建Cars
属性的对象取决于调用上下文。例如,如果将init
函数放在某个其他对象上,然后调用它,则该其他对象将发生变化:
var-Person={
汽车:[],
init:function(){
这个.Cars=[];
}
};
var myVar={};
myVar.init=Person.init;
myVar.init();
console.log(myVar)代码>这里发生了两种不同的事情,在尝试比较它们时,认识到它们之间的差异非常重要
var Container = {
Cars: [],
init: function() {
this.Cars = [];
}
};
var Shipment = {
Cars: [],
init: function() {
Shipment.Cars = [];
}
};
让我们从第二个开始(名为shipping
,以便更好地区分它们)
我们拥有的是一个带有单个方法的object literal,调用该方法时会将属性Cars
的值分配给一个数组
JS首先要做的是找到什么是shipping
,以及它的定义位置。它未在当前词汇范围/上下文中定义,因此它将上升一级。再升一级,直到找到为止。这就是为什么您也可以通过相同的方法从这里访问容器类的原因
在这种情况下,它会找到它,因为它是在全局范围内执行init
函数之前定义的。因此,我们找到装运
,然后将数组分配给它。所以我们实际上是在当前范围之外寻找对象文字,并一直寻找直到找到它。如果我们不能,JS显然会抛出一个错误。当您执行和默认绑定
时,会有更多内容,但这可能有点脱离主题
在第一种情况下我们要求JS提供当前词汇上下文中方法的所有者。这就是本例中的这
的意思。猜猜看。。。车主是集装箱
,幸运的是,我们可以按照计划分配汽车财产
现在请记住,根据执行情况,此
可能具有
含义
,在ES6箭头功能的情况下,它将始终是最重要的。然后在ECMAScript 5和类似的函数的帮助下,您可以使它基本上满足您的需要(尽管现在有些人不赞成这样做)。但在这个具体的例子中,我认为这应该涵盖大部分内容
希望这有帮助