如何从构造函数中调用js原型方法
How do I call a js prototype method from within the constructor function?
我读过关于SO的类似问题,不知道我做错了什么。我不能从构造函数方法内部调用原型方法。我得到:未捕获的类型错误:对象#没有方法"afterLoad"
var FiltersByDivision = function () {
$(document).on('afterLoad', this.afterLoad());
};
FiltersByDivision.prototype.afterLoad = function (){
console.log('afterLoad');
}
function OpenOrders() {
Widget.call(this);
FiltersByDivision.call(this);
this.widgetEndpoint = '/xxxxx';
}
OpenOrders.prototype = Object.create(Widget.prototype);
OpenOrders.prototype.constructor = OpenOrders;
此代码存在许多问题:
-
您不是从FiltersByDivision继承的,因此
OpenOrders
对象没有任何FiltersByDivision
方法。这就是为什么没有afterLoad
方法的原因。 -
$(document).on('afterLoad', this.afterLoad());
将立即执行this.afterLoad()
,并将其返回结果作为事件处理程序传递(这不是您想要的)。在您修复项目1之后,也许您需要$(document).on('afterLoad', this.afterLoad.bind(this));
这里有很多可能的结构。如果FiltersByDivision
是一个单独的对象,那么OpenOrders
的实例数据中可能只应该有这样一个对象(尽管如果它所做的只是设置一个事件处理程序,我不确定为什么它是一个独立类型的对象):
var FiltersByDivision = function () {
$(document).on('afterLoad', this.afterLoad.bind(this));
};
FiltersByDivision.prototype.afterLoad = function (){
console.log('afterLoad');
}
function OpenOrders() {
Widget.call(this);
this.filter = new FiltersByDivision();
this.widgetEndpoint = '/xxxxx';
}
OpenOrders.prototype = Object.create(Widget.prototype);
OpenOrders.prototype.constructor = OpenOrders;
this的值是调用对象,因此函数的声明不定义其值,而是定义如何调用它
var FiltersByDivision = function ()
var me = this;
$(document).on('afterLoad', function(){
me.afterLoad();
});
};
关于这个,原型和闭包的更多信息可以在这里找到:https://stackoverflow.com/a/16063711/1641941
相关文章:
- 如何在Mocha/Chai中测试JS原型(非模块)
- 如何从构造函数中调用js原型方法
- 当对象从服务器发送到客户端时,JS原型方法消失了
- JS原型无法设置属性'moveRight'的未定义
- 编写JS原型时,所有函数都应该使用原型对象
- js原型表创建
- JS原型:未捕获的类型错误未定义不是一个函数
- JS:原型模式兼容性
- JS原型 ─为什么是“未定义”
- JS原型是否可以访问初始化期间传递给对象的参数
- JS原型继承的意外结果
- 使用 JS 原型构建大型 JS 应用程序的性能优势
- JS原型,小混乱
- 节点.js原型继承
- JS.原型怪异行为中的属性
- 具有私有方法的JS原型类不访问属性
- JS原型类并非所有属性都可访问
- JS:原型-访问正确的实例属性
- node.js原型定义函数中可访问的私有变量
- node-js原型对象'self'var没有为回调存储正确的上下文