当在属性内发布属性时,Javascript变为'undefined'

时间:2014-12-10 03:00:06

标签: javascript jquery

使用JavaScript,我试图从另一个类中的类访问属性。我获得了undefined给定的访问权限。

主要示例代码:

//MainClass

function MainClass() {
   this.childClass = new ChildClass();
}


//ChildClass

function ChildClass() {
   this.prop1 = "A";
   this.prop2 = "B";
}  

ExampleWidget.js:

(function ($) {

    $.widget("myWidget", {

    _create: function () {
         this.mainClass = new MainClass();
    },

    doSomething: function (){
        this.mainClass.childClass.prop1 = "1"; 
        this.mainClass.childClass.prop2 = "2"; 

        alert(this.mainClass.childClass.prop1); // shows undefined
        alert(this.mainClass.childClass.prop2); // shows undefined

    }
  });
}(jQuery));

如何更改和访问子类的属性?

2 个答案:

答案 0 :(得分:2)

如何调用_createdoSomething?因为这是造成问题的原因。我的猜测是this在调用_createdoSomething时有所不同。 _create正在实例化并在一个对象上设置类,然后您的警报正在doSomething中的完全不同的对象上查找道具。

进一步证明,在没有外部呼叫者的情况下,代码可以自行编写:

http://jsfiddle.net/2v8gzc6n/3/

答案 1 :(得分:2)

我没有看到任何问题,但它仍然是你如何称呼doSomething方法。

以下是示例。

http://jsfiddle.net/jx5xr2m0/5/

你必须确保使用它来调用doSomething。

function MainClass() {
   this.childClass = new ChildClass();
}


//ChildClass

function ChildClass() {
   this.prop1 = "A";
   this.prop2 = "B";
} 

(function ($) {

    $.widget("custom.myWidget", {

    _create: function () {
         this.mainClass = new MainClass();  
         alert('ok');
         this.doSomething();
    },

    doSomething: function (){
        this.mainClass.childClass.prop1 = "1"; 
        this.mainClass.childClass.prop2 = "2"; 

        alert(this.mainClass.childClass.prop1); // shows undefined
        alert(this.mainClass.childClass.prop2); // shows undefined

    }
  });
}(jQuery));