账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    javascript中方法抽取和调用问题
    • 2018-03-27 00:00
    • 10
    64
    0

    场景:

    现有一个对象, 通过prototype关键字添加了方法foo():

    var Graph = new Graph();
    //foo
    Graph.prototype.foo = function(){
        ...
    }
    //fun
    Graph.prototype.fun = function(){
        ...
    }

    现在foo()方法中的逻辑太复杂, 所以想要将某一功能代码抽取成一个新的方法subfoo().
    这个时候, 我应该怎么做呢?

    我开始是这么做的:

    var Graph = new Graph();
    Graph.prototype.foo = function(){
        ....
        function subfoo(){
            //调用了fun()方法
            this.fun();    //能够成功调用graph的fun(), 但是走到fun()体中时, this就变成了window, 预期的是想要依然指向graph
        }
        //调用subfoo()方法
        subfoo.call(this);    //让this指向graph实例, 传入subfoo()
    }
    

    但是, 当我在subfoo()中又调用了一个Graph.prototype.fun方法时, 走到fun()时, 其中的this指针就会变成了window, 即使使用call也无效. 想要的当然是一直指向graph.

    可能是我的思路不对, 像这种需要抽取方法的场景应该怎么做呢?
    完全没有java真正面向对象的来的方便和易于理解呀!!!

    3
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 把秘密藏进抽屉 普通会员 1楼

      在JavaScript中,方法抽取和调用是非常常见的问题。方法抽取是指将一个大的对象分解成多个小的、独立的函数,这些函数可以分别执行特定的任务。方法调用则是指调用这些小的、独立的函数来完成特定的任务。

      例如,假设我们有一个大的对象data,它有多个属性和方法。我们想要抽取一些方法,并在调用它们时传递参数。这可以通过使用Object.keys()方法和Array.prototype.map()方法来实现。

      首先,我们需要获取所有的方法:

      javascript const methods = Object.keys(data);

      然后,我们使用Array.prototype.map()方法将这些方法转换为函数:

      javascript const functions = methods.map(method => { return function(data) { // 这里是你要调用的方法的代码 console.log(`Method ${method} is called with data: ${data}`); // 返回一个值 return 'Hello, World!'; } });

      最后,我们可以调用这些函数,并传递参数:

      javascript for (let i = 0; i < functions.length; i++) { const function = functions[i]; data[function.method] = function(data); }

      在这个例子中,我们创建了一个新的对象data,其中包含从原始data中抽取的方法。然后,我们调用这些方法,并将原始data传递给它们。

      这种方法可以有效地降低代码的耦合度,使代码更易于维护和扩展。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部