Javascript getter-为什么在构建时调用它?

Javascript getter-为什么在构建时调用它?,javascript,leaflet,ecmascript-5,Javascript,Leaflet,Ecmascript 5,我不熟悉Javascript getter/setter,但我想在基于传单和浏览器的项目中使用它们。我得到了一个惊喜 在类自己的initialize方法(传单构造回调)运行之前,getter在初始化时被调用,原因我不知道。这当然意味着成员是未定义的,并且所有成员都被分解。为什么会这样 这是JavaScript获取程序的一般行为吗 这是由传单(可能是其中的一个虫子)引起的吗 不幸的是,我还没有一个JSFIDLE来展示这一点——这可能是由于传单,或者是由于我所做的类似node.js的模块化构建(

我不熟悉Javascript getter/setter,但我想在基于传单和浏览器的项目中使用它们。我得到了一个惊喜

在类自己的
initialize
方法(传单构造回调)运行之前,getter在初始化时被调用,原因我不知道。这当然意味着成员是未定义的,并且所有成员都被分解。为什么会这样

  • 这是JavaScript获取程序的一般行为吗
  • 这是由传单(可能是其中的一个虫子)引起的吗
不幸的是,我还没有一个JSFIDLE来展示这一点——这可能是由于传单,或者是由于我所做的类似node.js的模块化构建(通过browserify)

代码如下:

/*
 * 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。您正在寻找和)。