【发布时间】:2019-02-18 09:24:28
【问题描述】:
您所期望的以下内容不起作用:
let User = {
foo() {
User.prop = 1;
}
};
let User2 = User;
User = null;
User2.foo(); // Cannot set property of null
console.log(User2.prop);
不过,这行得通:
class User {
static foo() {
User.prop = 1;
}
}
let User2 = User;
User = null;
User2.foo();
console.log(User2.prop); // 1
既然函数和类都是对象,而且在这两种情况下我都为它设置了一个属性,为什么结果会不同呢?它在哪里获得User 参考?
【问题讨论】:
-
请注意,您的第一个示例没有在任何东西上使用静态方法,它更像是
constructor类中的代码。我可以编辑澄清一下吗? -
我不确定你的意思。我的原始代码有一个函数,一旦被调用,它就会为自己设置一个属性(因为它是一个对象)。为什么你认为有必要引入
User对象? -
这样调用(
User2.foo();)的方式在两个例子中都是一样的,区别更明显。如果你想使用一个函数,也可以写let User = function() {}; User.foo = function() { User.prop = 1; };。随意编辑或回滚我的更改 - 这是你的问题!
标签: javascript ecmascript-6 scope es6-class