面向对象,javascript中的继承无法调用外部方法

时间:2015-06-05 12:37:24

标签: javascript oop refactoring

我想将我的工作代码重构为更好的结构化javascript。此刻我有这样的事情:

function Search(){
    addNode = function(nodeToAdd){
        //do something
    }
    function update(){
        var node = aKindOfObjectFromSomeLibrary;
        node.on('click', function(d){
            $.each(someArray, function(i){
                addNode(this);
            }
        }
    }
}

目标是用它创建一个Search对象,即使在外面也可以使用它:

var s = new Search();
s.addNode(nodeToAdd);

我在考虑这样做:

function Search(){
    this.addNode = function(nodeToAdd){}
}

但是在嵌套的泛型函数中无法访问函数addNode。

我正在研究的另一种方法是使用这种结构:

(function(){
    var object = {
        var field = itsValue,
        addNode : function(){}
    };
)();

但当然,在嵌套结构中调用方法的问题仍然存在。

您能否指导我重构代码的正确方法,是否能够在嵌套函数中传递

var scope = this
的唯一方法?

我也指的是stackoverflow中的这个Q& A: How to "properly" create a custom object in JavaScript?

不同的是,到目前为止,我不必为我的对象创建子类(这就是我尝试

(function(){})();
闭包结构的原因。

1 个答案:

答案 0 :(得分:0)

Zio,尝试以这种方式构建

util.Search(nodetoadd);

当你想要调用你所做的功能时:

var util = {

   addNode : function(node) {

        // do something

    }

但我建议不要创建只调用另一个函数(addNode)的函数搜索

只是做:

util.addNode(nodetoadd);

并称之为:

print "To Calculate the cost of your trip,"
print "enter the miles driven or enter zero to quit"
getMiles = float(raw_input ('Enter Miles: '))
while getMiles != 0:
    fuelEcon = getMiles / 20
    fuelCost = float(input ('Enter Cost of Fuel: $'))
    costOfTrip = getMiles * fuelCost
    fuelIncrease = (fuelCost * .1) + fuelCost
    futureTrip = getMiles * fuelIncrease
    print "Cost of Trip: $", costOfTrip
    print "Cost of Trip With 10% Increase in Fuel Cost: $", futureTrip
    getMiles = float(raw_input ('Enter Miles: '))
print "END OF PROGRAM"
# should be no need for exit() unless code is included in a subroutine