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和类似的函数的帮助下,您可以使它基本上满足您的需要(尽管现在有些人不赞成这样做)。但在这个具体的例子中,我认为这应该涵盖大部分内容

希望这有帮助