javascript继承问题

javascript继承问题,javascript,ajax,inheritance,Javascript,Ajax,Inheritance,我有两个对象,一个从另一个继承。 父对象发送一个ajax请求来发送一些联系电子邮件 如果我使用子对象发送请求,则所有数据均为空。。。为什么呢? ajax请求也被发送到正确的url,但数据对象为空 var contact_A = function(){ var self = this; this.url = '/xxx/xxx/xxx'; this.constructor = function(){ this.dialog = $('.contact_

我有两个对象,一个从另一个继承。 父对象发送一个ajax请求来发送一些联系电子邮件

如果我使用子对象发送请求,则所有数据均为空。。。为什么呢? ajax请求也被发送到正确的url,但数据对象为空

var contact_A = function(){
    var self = this;
    this.url = '/xxx/xxx/xxx';

    this.constructor = function(){ 

        this.dialog = $('.contact_box');

        this.sender = this.dialog.find('input[name=sender]');
        this.name = this.dialog.find('input[name=name]');
        this.content = this.dialog.find('textarea[name=content]');

        ...
    }

    this.init = function(){
       ...
       this.dialog.find('.button_blue').bind('click', function(){
           var data = self.process_form();
          if(data != false) self.send(data);
        });
        ...
    }

    this.process_form = function(){

        this.validator =  new validator('contact_box', true);
        if(this.validator.validate(true)) {

            var data = {
                sender: this.sender.val(),
                name: this.name.val(),
                content: this.content.val()
            }

            return data;
        } else return false;
    }

    this.send = function(data){

        $.ajax({
            type: "POST",
            url: self.url,
            data: data,
            success: function(msg){
                //if not successful
                self.successful(msg);
            },
            async: true
        });

        this.close();
    }

    ...

    this.constructor();
    this.init();
}
这是继承对象:

var conteact_B = function(){
    var self = this;
    this.constructor();
    this.init();    
}
conteact_B.prototype = new contact_A;
conteact_B.prototype.url = '/yyy/yyy/yyy';

您将对象的原型样式与每个实例成员与对象的闭包样式混合在一起。这不好用

问题是:

var contact_A = function(){
    var self = this;
    ... do stuff with self ...
};

conteact_B.prototype = new contact_A;
现在,自我的价值将永远是新的联系方式建立时的价值。也就是说:self永远是原型对象,而不是contact_B实例

因此,无论何时使用self,它都将针对原型对象而不是实例运行;它不会看到构造函数中分配的任何成员属性


为避免混淆,请从原型或此闭包对象中选择一个。有关背景信息,请参阅。

非常棒的链接!我现在在contact_B函数中创建contact_A的实例,然后更改url。这对我有好处。