Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建javascript函数';类别';这样我就可以访问';方法';从外部和内部的功能_Javascript_Oop_Methods - Fatal编程技术网

如何创建javascript函数';类别';这样我就可以访问';方法';从外部和内部的功能

如何创建javascript函数';类别';这样我就可以访问';方法';从外部和内部的功能,javascript,oop,methods,Javascript,Oop,Methods,我正在创建一个函数,用于处理分页和排序表的大量内容。它包含一个键函数,用于提交db查询并更新显示表 我希望能够从函数内部和创建的对象外部访问该内部函数/方法 testFunction = function() { keyMethod = function() { console.log('ya got me'); }; document.getElementById('test').addEventListener('click', function (

我正在创建一个函数,用于处理分页和排序表的大量内容。它包含一个键函数,用于提交db查询并更新显示表

我希望能够从函数内部和创建的对象外部访问该内部函数/方法

testFunction = function() {
    keyMethod = function() {
        console.log('ya got me');
    };

    document.getElementById('test').addEventListener('click', function (e) {
        keyMethod();
    });

    keyMethod();
};

myTest = new testFunction();
myTest.keyMethod();


testFunction = function() {
    this.keyMethod = function() {
        console.log('ya got me');
    };

    document.getElementById('test').addEventListener('click', function (e) {
        // would have to use bind here which then messes up trying to
        // find the correct target etc.
        keyMethod();
    });

    this.keyMethod();
};

myTest= new DrawShape();
myTest.keyMethod();
第一种方式创建它意味着keyMethod函数在testFunction中的任何地方都可用,但我不能从外部调用它

用第二种方法创建它意味着我可以使用myTest.keyMethod,但是如果不在任何地方使用bind,我就不能从内部函数调用它


有更好的方法吗?

您可以将作为回调函数提供的函数替换为,或者像前面所说的那样先使用该函数

testFunction=function(){
this.keyMethod=函数(){
console.log(‘你抓到我了’);
};
//通过简单地提供要调用的函数来替换回调。
//只要不在
//提供功能。
document.getElementById('test').addEventListener('click',this.keyMethod);
//如果回调方法确实使用'this'关键字,则可以使用
//箭头功能或绑定功能。
document.getElementById('test').addEventListener('click',event=>this.keyMethod());
document.getElementById('test').addEventListener('click',this.keyMethod.bind(this));
这个.keyMethod();
};
log(“构造函数输出:”);
myTest=新的testFunction();
log(“.keyMethod()输出:”);
myTest.keyMethod();
log(“单击事件输出:”)

test
这几乎是仅有的两个选项。你可能想详细说明一下目标绑定问题,我们可能会给你一些建议。target-bind问题,比如我将事件添加到一个带有一些txt/image/icon的标记中。通常我会这样做。getAttribute('blah')从a标记中获取一些内容。若我将其绑定到事件函数,我就不能这样做,e.target将指向标记的内容,即他们单击并冒泡到标记的内容。