JavaScript继承问题

标签 javascript ajax inheritance

我有两个对象,一个对象继承另一个对象。 父对象发送一个 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';

最佳答案

您将对象的原型(prototype)样式与对象的每个实例成员与此闭包样式混合在一起。这效果不太好。

问题是:

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

conteact_B.prototype = new contact_A;

现在,self 的值将始终是构造新 contact_Athis 的值。也就是说:self 始终是原型(prototype)对象,而不是 contact_B 实例。

因此,每当使用 self 时,它将针对原型(prototype)对象而不是实例运行;它不会看到在构造函数中分配的任何成员属性。

为了避免混淆,请从原型(prototype)或 this-closure 对象中选择一个。请参阅this discussion一些背景。

关于JavaScript继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4050837/

相关文章:

javascript - 从 pixi 到 p2 的 Sprite 边界多边形

class - 类方法的可见细化

javascript - 在javascript中传递函数和函数调用自身有什么区别?

javascript - 谷歌地图 : Transparent Polygons

javascript - D3、传递变量的 Angular 组件

php - Omegle 如何直接连接 HTTP 协议(protocol)?

javascript - 从 $.ajax({ 成功 : function() }) dungeon

jquery - 你能通过 url 发送 JSON 吗?

PHP接口(interface)和抽象类继承的最佳实践?

java - 需要继承逻辑方面的帮助