Javascript 为什么这里需要setter?
HTML代码段Javascript 为什么这里需要setter?,javascript,Javascript,HTML代码段 <div id="container"> <span class="no"></span> <span class="yes"></span> <span class="no"></span> <span class="no"></span> </div> 但是,如果我添加一个空的setter,它可以正常工作: clas
<div id="container">
<span class="no"></span>
<span class="yes"></span>
<span class="no"></span>
<span class="no"></span>
</div>
但是,如果我添加一个空的setter,它可以正常工作:
class Something{
constructor(){
this.elem = container;
}
get childYes(){
let span = this.elem.querySelector(".yes");
this.childYes = span;
return span;
}
set childYes(a){};
}
var object = new Something();
console.log(object.childYes); // <span class="yes"></span>
我不需要一个setter,browser到底想从我这里得到什么
无法设置只有getter的属性clientName
通过这样做。childYes=。。。在定义为访问器的属性上,尝试使用setter。要定义实例上的属性,请使用Object.defineProperty:
分类{
建造师{
this.elem=容器;
}
带孩子来是的{
console.logGetter-ran;
设span=this.elem.querySelector.yes;
Object.defineProperty这个孩子是的{
值:span
};
返回跨度;
}
}
var对象=新事物;
console.logobject.childYes;//运行getter
console.logobject.childYes;//使用数据属性
无法设置只有getter的属性clientName
通过这样做。childYes=。。。在定义为访问器的属性上,尝试使用setter。要定义实例上的属性,请使用Object.defineProperty:
分类{
建造师{
this.elem=容器;
}
带孩子来是的{
console.logGetter-ran;
设span=this.elem.querySelector.yes;
Object.defineProperty这个孩子是的{
值:span
};
返回跨度;
}
}
var对象=新事物;
console.logobject.childYes;//运行getter
console.logobject.childYes;//使用数据属性
因为这个.childYes=。。。打电话给二传手,你想在这里实现什么?为什么你会有这个。childYes=span;line?@NiettheDarkAbsol-有些人喜欢使用这个“如果我需要它,就获取一次”行为,在第一次使用时将访问器转换为数据属性。@T.J.Crowder啊,这是一种懒惰的评估工作。事实上,这是一个巧妙的技巧,尽管在这种情况下它确实感觉像是一个微优化。。。打电话给二传手,你想在这里实现什么?为什么你会有这个。childYes=span;line?@NiettheDarkAbsol-有些人喜欢使用这个“如果我需要它,就获取一次”行为,在第一次使用时将访问器转换为数据属性。@T.J.Crowder啊,这是一种懒惰的评估工作。实际上,这是一个巧妙的技巧,尽管在这种情况下它确实感觉像是一个微观优化。因此,如果我错了,请纠正我:调用object.childYes后,程序首先查找object的own.childYes属性;失败;走向原型;找到getter;开始执行getter,当行'this.childYes=span;`似乎程序在此处查找它(例如在原型中),但失败了,对吗?@IgorCheglakov-我已更新了答案以回答您的评论:-所以,如果我错了,请纠正我:调用object.childYes后,程序首先查找object的own.childYes属性;失败;走向原型;找到getter;开始执行getter,当行'this.childYes=span;`似乎程序在此处查找它(例如在原型中),但失败了,对吗?@IgorCheglakov-我已更新了答案以回答您的评论:-
class Something{
constructor(){
this.elem = container;
}
get childYes(){
let span = this.elem.querySelector(".yes");
this.childYes = span;
return span;
}
set childYes(a){};
}
var object = new Something();
console.log(object.childYes); // <span class="yes"></span>
get childYes(){
let span = this.elem.querySelector(".yes");
Object.defineProperty(this, "childYes", {
value: span
});
return span;
}