创建对象时了解JavaScript中的“此”放置

时间:2018-10-24 04:31:09

标签: javascript object this

我试图理解为什么在创建对象时Fruit函数起作用的原因:

function Fruit(name, color, shape){
    this.name = name;
    this.color = color;
    this.shape = shape;
}

var apples = new Fruit('apple', 'red', 'round');

为什么不是以下内容:

function Fruit(name, color, shape){
   name = this.name;
   color = this.color;
   shape = this.shape;
}

例如,如果等号后面的名称指向“苹果” 这指向了var apples中的参数,把它放在后面会更有意义吗?

对不起,如果我没有正确说明问题。


为了弄清楚为什么我不明白,我们来更改名称,以使它们不相同:

 function Fruit(name, color, shape){
     this.thename = name;
     this.thecolor = color;
     this.theshape = shape;
 }

无花果=新果('apple','red','round');

这将仍然有效,因为对象apples将是{thename:'apple',thecolor:'red',theshape:'round'}

那么,如果函数中有name = this.name的话,那不是thename ='apple'吗?

2 个答案:

答案 0 :(得分:1)

如果我们有类似的功能,请澄清您的建议(根据您的修改进行编辑)

function Fruit(name, color, shape){
    thename = this.name;
    thecolor = this.color;
    theshape = this.shape;
}

然后致电

var apples = new Fruit('apple', 'red', 'round');

表示:

thename = this.name
thecolor = this.color
theshape = this.shape

现在,您正在尝试将不存在的属性存储到变量中,这些变量在调用函数后将无法访问,并且可能会在最后被垃圾回收。在这种情况下,结果将没有属性,并且将不会保存传递给它的任何数据。

您的误解是使用name而不是this.name来访问函数的name参数,这是一个澄清:

  • 使用函数初始定义期间为其分配的任何名称访问函数参数
  • 通过致电this.attribute 访问
  • 属性

进行这种区分是为了使您清楚使用属性还是使用参数。

答案 1 :(得分:0)

这只是第一种方法,是因为赋值运算符=将右侧分配给左侧,而不是引用。