【发布时间】:2015-07-14 21:43:20
【问题描述】:
我在 javascript 中使用类的私有成员时遇到了一个问题,我自己无法解决。
"use strict";
var privateData = new WeakMap();
class Fruit{
constructor(name){
privateData.set(this, {name: name});
}
name(){
return privateData.get(this).name;
}
}
class Orange extends Fruit{
constructor(){
super("Orange");
privateData.set(this, {color: "blue"});
}
color(){
return privateData.get(this).color;
}
}
var fruit = new Fruit("Apple");
alert(fruit.name());
var orange = new Orange();
alert(orange.name());
第一个输出:Apple 第二个输出:未定义
我的猜测是,我正在覆盖“this”,因为如果我删除了
return privateData.get(this).color;
它有效。
【问题讨论】:
-
您将值更改为
{color: 'blue'},因此稍后访问name将返回undefined。 WeakMap 不会神奇地合并这些值。 -
为什么要使用“私人会员”呢?你几乎不需要它们。
标签: javascript class ecmascript-6 private-members