Javascript 通过include()更改传单类的行为

Javascript 通过include()更改传单类的行为,javascript,leaflet,Javascript,Leaflet,您可以通过以下方式更改传单.js类的行为 教程说: 如果已定义类,则可以重新定义现有属性/方法,或者使用.include()添加新属性/方法: 然而,当尝试这样做时,我得到一个超过最大调用堆栈大小的错误 var DemoClass=L.Class.extend({ 价值:42, demoMethod:function(){ 返回此.value; } }); 包括({ demoMethod:function(){ 返回DemoClass.prototype.demoMethod.call(thi

您可以通过以下方式更改传单.js类的行为

教程说:

如果已定义类,则可以重新定义现有属性/方法,或者使用.include()添加新属性/方法:

然而,当尝试这样做时,我得到一个
超过最大调用堆栈大小的错误

var DemoClass=L.Class.extend({
价值:42,
demoMethod:function(){
返回此.value;
}
});
包括({
demoMethod:function(){
返回DemoClass.prototype.demoMethod.call(this)*2;
},
第二种方法:函数(){
返回此.value;
}
});
var instance=new DemoClass();
console.log(“value=“+instance.value”);
log(“secondMethod()=”+instance.secondMethod());
console.log(“demoMethod()=”+instance.demoMethod());//给出超出调用堆栈的值

尝试隔离基本功能:

var DemoClass=L.Class.extend({
价值:42,
demoMethod:function(){
返回此.value;
}
});
包括({
baseDemoMethod:DemoClass.prototype.demoMethod,
demoMethod:function(){
返回此.baseDemoMethod()*2;
},
第二种方法:函数(){
返回此.value;
}
});
var instance=new DemoClass();
console.log(“value=“+instance.value”);
log(“secondMethod()=”+instance.secondMethod());
log(“demoMethod()=”+instance.demoMethod())

尝试隔离基本功能:

var DemoClass=L.Class.extend({
价值:42,
demoMethod:function(){
返回此.value;
}
});
包括({
baseDemoMethod:DemoClass.prototype.demoMethod,
demoMethod:function(){
返回此.baseDemoMethod()*2;
},
第二种方法:函数(){
返回此.value;
}
});
var instance=new DemoClass();
console.log(“value=“+instance.value”);
log(“secondMethod()=”+instance.secondMethod());
log(“demoMethod()=”+instance.demoMethod())
您正在进行无限递归调用,就在那里

JS有时很奇怪,这次就是其中之一。通过引用
DemoClass.prototype
,您指的是
DemoClass.prototype
的最新状态。。。所以
DemoClass.prototype.demoMethod
指的是它自己

无论何时覆盖原型方法或属性,前一个方法或属性都会被覆盖

如果要引用该方法以前的定义,必须保留对该方法以前定义的引用

这通常需要某种形式的技巧(在某些受控变量范围内保留对原始值的引用)。有多种方法可以做到这一点:像@Jaws一样,将对先前原型的引用作为类属性保存;在某处做个了结;在中执行类似操作,或者执行任何允许保留对原始方法定义的引用的操作

您正在进行无限递归调用,就在那里

JS有时很奇怪,这次就是其中之一。通过引用
DemoClass.prototype
,您指的是
DemoClass.prototype
的最新状态。。。所以
DemoClass.prototype.demoMethod
指的是它自己

无论何时覆盖原型方法或属性,前一个方法或属性都会被覆盖

如果要引用该方法以前的定义,必须保留对该方法以前定义的引用

这通常需要某种形式的技巧(在某些受控变量范围内保留对原始值的引用)。有多种方法可以做到这一点:像@Jaws一样,将对先前原型的引用作为类属性保存;在某处做个了结;在中执行类似操作,或者执行任何允许保留对原始方法定义的引用的操作

  demoMethod: function() {
    return DemoClass.prototype.demoMethod.call(this) * 2;
  },