Javascript getter-为什么在构建时调用它?
我不熟悉Javascript getter/setter,但我想在基于传单和浏览器的项目中使用它们。我得到了一个惊喜 在类自己的Javascript getter-为什么在构建时调用它?,javascript,leaflet,ecmascript-5,Javascript,Leaflet,Ecmascript 5,我不熟悉Javascript getter/setter,但我想在基于传单和浏览器的项目中使用它们。我得到了一个惊喜 在类自己的initialize方法(传单构造回调)运行之前,getter在初始化时被调用,原因我不知道。这当然意味着成员是未定义的,并且所有成员都被分解。为什么会这样 这是JavaScript获取程序的一般行为吗 这是由传单(可能是其中的一个虫子)引起的吗 不幸的是,我还没有一个JSFIDLE来展示这一点——这可能是由于传单,或者是由于我所做的类似node.js的模块化构建(
initialize
方法(传单构造回调)运行之前,getter在初始化时被调用,原因我不知道。这当然意味着成员是未定义的,并且所有成员都被分解。为什么会这样
- 这是JavaScript获取程序的一般行为吗
- 这是由传单(可能是其中的一个虫子)引起的吗
/*
* Temp.js
*/
"use strict";
module.exports = L.Class.extend( {
initialize: function () {
console.log("initialized");
},
// --- Public methods ---
get some () {
console.log("getter");
return 42;
},
set some (v) {
console.log("setter: "+v);
}
});
呼叫代码:
// this just for experiments
//
var Temp = require('./src/Temp.js');
var xxx = new Temp();
生成输出:
[Log] getter (out.js, line 2102)
[Log] initialized (out.js, line 2096)
那么:什么可以称之为get
使用:Safari 8.0.6(OS X),当前传单master
,浏览10.1.0
增编:
调试时,调用getter的行在传单中。我不能代表传单,但是
extend
的通常实现有一个类似以下内容的循环:
var propertyName;
for (propertyName in source) {
dest[propertyName] = source[propertyName];
}
如您所见,它在调用时读取属性的值,扩展了(并存储结果值,而不是getter函数)
您可能想检查文档,但我怀疑L.Class.extend
是否与getter/setter兼容。您可能需要在initialize
中定义这些getter/setter,例如:
var somePropDef = {
get: function() {
console.log("some getter");
return 42;
},
set: function(v) {
console.log("some setter: "+v);
}
};
module.exports = L.Class.extend( {
initialize: function () {
Object.defineProperty(this, "some", somePropDef);
console.log("initialized");
},
});
知道第一行是否在var Temp=require('./src/Temp.js')期间被记录是相当重要的代码>或在var xxx=new Temp()期间
.separated:您确定L.Class.extend
与getter/setter属性兼容吗?各种工具包中通常的extend
实现并非如此。这就是我要找的地方。“调试,调用getter的线路就是传单中的这一条。”我真的不认为是这样,我认为那里有点混乱。@t.J.Crowder在require调用期间记录了第一条线路。谢谢你的回答!我还做了一份宣传单,使其与应用程序类中的ECMAscript5 getter/setter兼容@阿卡皮:很酷,谢谢你的回馈。那个特定的请求可能不会成功。问题是,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。它们是特定于Mozilla的JavaScript。您正在寻找和)。