Javascript继承:从超类的方法设置子类的属性
Javascript Inheritance: Setting property of sub-class from method of super class
如果以前有人问过这个问题,我很抱歉,但经过大量搜索,我似乎找不到一个明确解决我的问题的答案。
我有一个我们称之为Form的超级类,它有一些通用方法。我只关注两种特殊的方法。show_form()
显示表单,load_token()
从服务器获取令牌。
表单
function Form() {
// Event handler for form submission
this.submit_button.bind('click', jQuery.proxy(function(){
this.submit();
}, this));
}
Form.prototype.show_form = function() {
// Some other stuff happens here, but this is the relevant part.
// We load the token
this.load_token();
}
Form.prototype.load_token = function(){
// Contains a synchronous ajax request that fetches the token from the server
// and sets it. So we end up with
this.token = 'some-token';
};
然后我有一个名为EmailForm的子类,它继承了Form。我还为这个类定义了一个自定义的submit()
方法,该方法由Form()
的构造函数中的事件处理程序调用。所以我有:
电子邮件窗体
function EmailForm() {};
EmailForm.prototype = new Form();
EmailForm.prototype.submit = function() {
console.log(this.token); // Returns undefined
};
最后,以下是如何将其整合在一起
$('#email_form_link').bind('click', function(){
var email_form = new EmailForm();
email_form.show_form();
});
问题
所以我需要令牌来向服务器发出请求。由于有几个表单需要load_token()
方法,我在超类中定义了它,并让子类继承它。由于我调用了email_form.show_form()
,我希望email_form
的token
属性会被设置,但事实并非如此。
那么,我如何调用从超类继承的方法,并让它更改调用它的子类的属性呢?
您可以尝试使用this
关键字而不是使用对象的prototype
来定义方法。当然,这意味着每个新对象都将获得自己的方法实例(更多内存),而不是"继承"或共享同一实例,但通过这种方式,每个对象(子类EmailForm)都将设置自己的属性token
。
Ex。
http://jsfiddle.net/64RRY/1/
http://api.jquery.com/bind/
从jQuery 1.7开始,.on()方法是将事件处理程序附加到文档。
如果你想要每个表单都有一个令牌,那么问题可能是由异步请求在请求值时没有返回值引起的(我没有看到异步代码,也没有看到请求令牌值的代码)
Form.prototype.load_token = function(){
var me = this;
$.get("ur").then(function(data){
me.token = 'some-token';
}//,fail function here
);
};
如果您希望令牌设置一次,并为之后创建的每个EmailForm或Form项目共享其值:
$.get("url")then(function(data){
Form.prototype.token = data.token;
});
- 如何将类方法设置为等于多个函数?-Javascript
- 如何使用setVisible()方法设置json模型中元素的可见属性
- 为node.js中的方法设置before/after钩子
- Javascript继承:从超类的方法设置子类的属性
- 使用 jquery ajax 上传文件的数据方法设置
- JS使用不同的方法设置点击属性
- 为流星方法设置 cron 作业
- 在Internet Explorer中从javascript打印方法设置pdf的文件名不起作用
- 类型错误:对象 #<套接字> 没有方法“设置”
- 将 jquery remove 方法设置为动画完成时的回调不起作用
- 主干.js:未捕获类型错误:对象 [对象数组] 没有方法“设置”
- 有没有办法为之前卸载方法设置例外
- 为什么使用jQuery设置属性会得到与使用DOM方法设置不同的结果呢
- 使用.html()方法设置javascript
- 正确的方法设置cookie从jQuery和读取从php
- 不能使用jQuery和value方法设置文本区域中的文本
- 如何使用SELECT2输入框方法设置默认值
- 使用传递给哑组件的方法设置状态
- 更好的jQuery方法设置outerWidth(true) - width
- 在对象的方法中通过外部方法设置变量