2015-04-02 128 views
4

我将如何做到以下几点:访问父功能

var Parent = function() { 
this.Child = { 
    childFunction: function() { 
     this.parentFunction(); 
    } 
    }; 
    this.parentFunction = function() { 

    } 
}; 
var parentObj = new Parent(); 
parentObj.Child.childFunction(); 

在我得到“undefined是不是一个函数”,因为很明显parentFunction()不在范围内的那一刻,但我我不确定使其无障碍的最佳方式是什么?

回答

0
var Parent = function() { 
this.Child = { 
    childFunction: function() { 
     this.parentFunction(); 
    } 
    }; 
    this.parentFunction = function() { 

    } 
}; 

现在里面的this.Child childFunction这将引用子对象,而不是父。

所以你必须使用self/that引用父。

var Parent = function() { 
    var that = this; 
    this.Child = { 

     childFunction: function() { 
      that.parentFunction(); 
     } 
     }; 
     this.parentFunction = function() { 

     } 
    }; 

您也可以使用Parent.parentFunction()。

var Parent = function() { 
    this.Child = { 

     childFunction: function() { 
      Parent.parentFunction(); 
     } 
     }; 
     this.parentFunction = function() { 

     } 
    }; 
1

thisChild将指Child对象不Parent从而在其中可以稍后在childFunction中使用的变量的存储的Parentthis参考。

var Parent = function() { 
 
    var _self = this; //Store the reference 
 
    this.Child = { 
 
    childFunction: function() { 
 
     _self.parentFunction(); //Use here 
 
    } 
 
    }; 
 
    this.parentFunction = function() { 
 
    alert('In parentFunction'); 
 
    } 
 
}; 
 
var parentObj = new Parent(); 
 
parentObj.Child.childFunction();

0

的问题是,thischildFunction是指当前对象是Child

常见的解决方案是使用通过closure可用的变量访问父项。例如:

var Parent = function() { 
    var _this = this; 

    this.Child = { 
     childFunction: function() { 
      _this.parentFunction(); 
     } 
    }; 

    this.parentFunction = function() { 
     // ... 
    } 
}; 

可替换地,一个更麻烦的方法是使用bind为“领带”的childFunction的函数上下文到当前this(其是亲本):

childFunction: function() { 
    this.parentFunction(); 
}.bind(this); 

MDN