【发布时间】:2016-01-04 13:19:46
【问题描述】:
即使javascript 中没有“真实”对象,我仍在努力使它们彼此不同。
例如,我有两个对象 Apple 和 Orange 定义如下:
function Apple(){
this.name = "Apple";
}
和
function Orange(){
this.name = "Orange";
}
从OOP 的角度来看,两个name 属性没有关联,因为它们是不同类的属性。
我的问题/问题是,在重命名 class Apple 的 name 属性时,ReSharper 还会要求我重命名 Orange 类的属性。
同时按 F12 (GOTO DEFINITION) 将显示这两个属性。
但是为什么呢?它们是在全局范围内定义的吗?我怎样才能区分它们,所以 Orange 和 Apple 是真正不同的对象?
【问题讨论】:
-
这似乎是 ReSharper 的问题,而不是您的代码。在 JS 中,这些类的对象是完全不同的:jsfiddle.net/16owh01o/3
-
也就是说,除非您将函数作为函数而不是通过构造函数调用:
Orange(); Apple();在这种情况下,两者都将写入全局范围,因为this将引用全局对象(通常是window)。也许 reshaper 会对你的函数使用做出假设。 -
@nils:所以我可以尝试不让它们在全局范围内吗?不知道你说的
unless your are calling your functions as functions and not via a constructor是什么意思 -
如果你按照 Lucas S. 建议的方式使用它们(即
var myOrange = new Orange();而不是仅仅调用Orange();),你应该没问题。这样,this将引用您的新对象myOrange。
标签: javascript class oop resharper