使用object在javascript中调用嵌套函数

时间:2014-06-16 20:27:09

标签: javascript php jquery

我在file1.js中有这个名为wire_quick_search的javascript函数

function wire_quick_search()
{
    console.log('hits wire_quick_search');
    empty_count=0;
    var load_search_result=function(payload,id,class_name,max_empty_count){
        console.log('hits load_search_result');
    };
}

现在我试图从php方法访问load_search_result()但由于某种原因我不断得到未定义的函数。这是php方法的示例代码。

private static function _return_order_search_only($text,$count_flag=1)
    {
        $html="
        <div class='level_1_container'>
            ".self::_render_order_search_container()."
        </div>
        ";
        $js="
        jQuery(document).ready(function(){
            var key='key=".self::get_key()."';
            payload=key+'&event=".self::ACTION_GLOBAL_ORDER_SEARCH."&text=$text';
            var obj1=new wire_quick_search();
            obj1.load_search_result(payload,'order_search_id','order_search_class',$count_flag);
        });
        ";
        return array($html,$js);
    }

这是我的控制台的屏幕截图。 console log

那么如何访问load_search_result函数呢?

3 个答案:

答案 0 :(得分:1)

我对这个例子感到有些困惑,也许我只是在上下文中阅读它,但是我可以看到你的内部函数load_search_result是一个私有函数。

当您创建对象的新实例时,如果不使用原始对象中的this将其公开,则无法以您尝试的方式访问它。

function wire_quick_search() {
    console.log('hits wire_quick_search');
    empty_count=0;
    this.load_search_result=function(payload,id,class_name,max_empty_count){
        console.log('hits load_search_result');
    };
}

答案 1 :(得分:0)

试试这个:

function wire_quick_search()
{
    console.log('hits wire_quick_search');
    empty_count=0;
    this.load_search_result=function(payload,id,class_name,max_empty_count){
        console.log('hits load_search_result');
    };
}

请注意this.load_search_result而不是var

根据定义,使用var定义的变量不得在其设计的块之外可见。使用this添加公共可见对象成员。

答案 2 :(得分:-1)

重要警告!

关于在上面的示例中使用关键字“this”。这恰好起作用,因为在调用时“this”的上下文恰好是全局调用上下文。但是,有一个重要的警告,你可能想要意识到未来:

考虑:

(在测试之前,请确保刷新浏览器,否则load_search_result仍会在全局上下文中保留在内存中,我的示例似乎毫无意义。)

function wire_quick_search() {
    console.log('hits wire_quick_search');
    empty_count=0;
    this.load_search_result=function(payload,id,class_name,max_empty_count){
        console.log('hits load_search_result');
    };
}

var notGlobal = {
    wire_quick_search: wire_quick_search
};

notGlobal.wire_quick_search(); // => 'hits wire_quick_search'
load_search_result(); // => ReferenceError: load_search_result is not defined

全局上下文中load_search_result未定义的原因是由于在调用时,关键字“this”指的是notGlobal,并且仍然与此绑定。

进一步说明我的观点:

notGlobal // => { wire_quick_search: [Function: wire_quick_search], load_search_result: [Function] }
notGlobal.load_search_result() // hits load_search_result
load_search_result(); // => ReferenceError: load_search_result is not defined