这是我的代码。
它在创建继承映射的新实例(CustomMap)时抛出。
调用init
namespace.Map.apply(this, mapContainer);
函数
https://jsfiddle.net/y6qg4xbn/
var namespace = window.namespace || {};
namespace.Map = function (mapContainer) {
this.mapContainer = mapContainer;
this.preinit();
this.init();
}
namespace.Map.prototype.preinit = function () {
};
namespace.Map.prototype.init = function () {
};
namespace.CustomMap = function (mapContainer) {
namespace.Map.apply(this, mapContainer);
};
namespace.CustomMap.prototype = Object.create(namespace.Map);
namespace.CustomMap.prototype.preinit = function () {
// do some stuff or even call base preinit
}
var newMap = new namespace.Map();
var inheritedMap = new namespace.CustomMap();
答案 0 :(得分:1)
改变这个:
namespace.CustomMap.prototype = Object.create(namespace.Map);
到此:
namespace.CustomMap.prototype = Object.create(namespace.Map.prototype);
您应该将CustomMap.prototype
作为Map.prototype
,而不是Map
。基础中没有.init()
方法,因为在创建派生原型时您没有包含基本原型。
而且,您需要更改此问题的另一个问题是:
namespace.Map.apply(this, mapContainer);
到此:
namespace.Map.call(this, mapContainer);
因为mapContainer
是一个特定的变量,而不是一个参数数组,这意味着你应该使用.call()
而不是.apply()
。