我试图理解为什么在创建对象时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'吗?
答案 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)
这只是第一种方法,是因为赋值运算符=将右侧分配给左侧,而不是引用。