我在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);
}
这是我的控制台的屏幕截图。
那么如何访问load_search_result函数呢?
答案 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