我的ES6课程如下
rows, err := db.Query(`Query`)
if err != nil {
//error
return
} else {
// logging
}
}
for rows.Next() {
ref := &structurre{}
err := rows.Scan(&ref.number, &ref.animal[0].tiger, &ref.animal[o].lion)
if err != nil {
logEntry.Info(err)
return details, err
}
details = append(details, ref)
}
type structure struct {
number string
animal []*zoo
}
type zoo struct {
tiger string
lion string
}
我有2个问题;
function a(n){ if(n == 1){ return; } a(--n); console.log("hello world = ",n); } a(10);
我可以看到“ power”位于CoffeeMachine的 proto 上,并且具有相同的值,即100 考虑到我没有在任何地方显式设置“电源”,怎么办?
答案 0 :(得分:2)
getter和setter是transparent,这意味着观察者(控制台)无法区分常规属性和getter / setter。
考虑到我没有在任何地方明确设置“电源”怎么办?
我猜这是控制台一次评估对象的所有值,然后将这些值与拥有那些属性的相应对象相关联。否则,它将不得不对吸气剂进行两次评估(一次针对对象,一次针对原型),而这种行为可能是不希望的。
不过,您可以在原型上手动评估吸气剂:
class See { get me() { return "now"; } }
console.log(See.prototype.me);
在此示例中是否真的有可能实现私有/受保护?
是的,在ES6中肯定可以在地图周围使用IIFE:
const Private = (() => {
const priv = new WeakMap();
return class {
get priv() { return priv.get(this); }
set priv(v) { priv.set(this, v); }
};
})();
但是,正如已经在评论中指出的那样,您可能不需要它。正如您所说,对于ES2020,还有私有财产。
答案 1 :(得分:0)
您需要创建一个带有#
前缀的私有变量。示例:
class CoffeeMachine {
#_power;
constructor(power) {
this.#_power = power;
}
get power() {
return this.#_power;
}
}
// create the coffee machine
let coffeeMachine = new CoffeeMachine(100);
console.log(coffeeMachine);
console.log(coffeeMachine._power);
console.log(coffeeMachine.power);