首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript构造函数中相同的变量名和属性名

JavaScript构造函数中相同的变量名和属性名
EN

Stack Overflow用户
提问于 2014-05-18 06:19:38
回答 1查看 42关注 0票数 1

考虑JavaScript中类的以下定义:

代码语言:javascript
复制
// Car constructor
function Car(color) {
    var hasWheels = true;
    this.color = color;
    this.hasWheels = hasWheels;
}
var redCar = new Car('red');
console.log(redCar.hasWheels);

它看起来很有效,因为它在Firefox中没有错误,并且将true写到控制台。但是,这段代码是正确的还是JavaScript太宽容了?Netbeans抱怨说,在汽车构造函数中,变量hasWheels未使用。而且,当我键入hasWheels时,它不会给redCar.提供任何提示。这与属性color一起正常工作。那么,我必须将变量hasWheels重命名为_hasWheels吗?(我知道在这个简单的例子中,我可以直接将属性hasWeels设置为true,但这不是我问题的重点。)因此,新代码看起来应该是:

代码语言:javascript
复制
// Car constructor
function Car(color) {
    var _hasWheels = true;
    this.color = color;
    this.hasWheels = _hasWheels;
}
var redCar = new Car('red');
console.log(redCar.hasWheels);

对于NetBeans来说,这似乎很好。但是,我更喜欢将属性和变量命名为相同的名称,因为它们位于指定的末尾。而且,构造函数最后一行中的this['hasWheels'] = hasWheels似乎不起作用。

至于它的价值,这在NetBeans中工作得很好:

代码语言:javascript
复制
function Car(color) {
    var hasWheels = true;
    return {
        color: color,
        hasWheels: hasWheels
    };
}
var redCar = new Car('red');
console.log(redCar.hasWheels);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-18 06:25:38

是的,他们可以有相同的名字。函数参数与函数的局部变量位于同一个名称空间中,但对象本身的属性完全不同。

您可以将参数和局部变量视为本地作用域对象(或范围链)上的项,而当前对象的属性是this指向的对象的属性。这两个名称空间是不同的。达到一个没有像color那样的限定符。另一个只能通过引用对象来实现,就像在this.color中一样。因此,this.color = color工作得很好--将一个变量的值从一个名称空间分配给另一个对象名称空间中的属性--两个完全独立的变量。

在您所说的不起作用的示例中:

代码语言:javascript
复制
// Car constructor
function Car(color) {
    var hasWheels = true;
    this.color = color;
    this.hasWheels = hasWheels;
}

这里也不应该有任何问题,而且它似乎在这里运行得很好:http://jsfiddle.net/jfriend00/7PSg9/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23719143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档