未在自定义 OL3 控件的构造函数中定义的原型属性
Prototype property not defined inside a constructor of a custom OL3 control
我正在尝试在 ol3 中创建自定义控件。我遇到了这个例子,并决定制作一些类,而不是在整个页面上编写一大堆代码。所以我有这样的东西:
var MeasureLength = function ( opt_options ) {
var options = opt_options || {};
var button = document.createElement( 'button' );
button.innerText = 'M';
button.addEventListener( 'click', this._trigger, false );
var element = document.createElement( 'div' );
element.className = 'measure-length ol-control';
element.appendChild( button );
ol.control.Control.call( this, {
element: element,
target: options.target
} );
};
MeasureLength.prototype._trigger = function ( e ) {
e.preventDefault();
alert("Activating!");
};
ol.inherits( MeasureLength, ol.control.Control );
问题是没有调用_trigger
。使其工作的一种方法是将_trigger
放在构造函数中:
var _trigger = function ( e ) {
e.preventDefault();
alert("Activating!");
};
button.addEventListener( 'click', _trigger, false );
但我不喜欢这种方式,因为代码再次堆成一堆,所有 OOP 都崩溃了。
所以我的问题是:当您有大量代码时,在 ol3 中创建自定义控件的最佳实践是什么?
闭包的inherits
函数用父级的实例覆盖子项的prototype
。
如果在调用 inherits
后附加 _triggered
属性,它应该在子构造函数中可用:
var MeasureLength = function ( opt_options ) {
// should now be available
console.log(this._trigger);
};
ol.inherits( MeasureLength, ol.control.Control );
MeasureLength.prototype._trigger = function ( e ) {
e.preventDefault();
console.log("Activating!");
};
相关文章:
- 得到"未定义不是函数“;使用显示原型图案时出错
- 如何将原型用于自定义方法和对象操作
- Javascript:继承原型而不重新定义构造函数
- AngularJS ng repeat显示原型函数未定义
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- 为什么在原型中定义属性被视为反模式
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 可以'这'在原型函数中未定义
- JS原型无法设置属性'moveRight'的未定义
- 使用自定义原型实例化JavaScript函数
- 为什么不能使用lambda来定义原型函数
- 函数的自定义原型链
- javascript使用现有原型重新定义原型
- 仅为{..}对象定义原型
- 谷歌地图API -自定义原型标记图像从今天开始不显示
- 如何在定义原型函数时绑定它?
- 你能在JavaScript中使用自定义原型创建函数吗?
- 为XML原型函数的JavaScript定义原型属性
- 无法在 ES6 类定义中定义原型属性
- Javascript对象:重新定义原型是不行的