【问题标题】:Why does object prototype methods have no caller in oop unlike in procedural programming与过程编程不同,为什么对象原型方法在 oop 中没有调用者
【发布时间】:2017-02-23 07:04:39
【问题描述】:

如果我有一个像这样调用另一个过程函数的过程函数:

function awesome() {
    return arguments.callee.caller.name;
}
function ridiculous() {
    return awesome();
}
ridiculous();

然后我回复了名为“可笑”的来电者。但是当我用 oop-style 写它时,调用者为空。

function myObj() {}
myObj.prototype.awesome = function() {
    return arguments.callee.caller.name;
}
myObj.prototype.ridiculous = function() {
    return this.awesome();
}

我想知道为什么会发生这种情况以及无论如何如何找回来电者。

【问题讨论】:

    标签: javascript oop function-prototypes procedural-programming


    【解决方案1】:

    对象中的键和函数名不是一回事。

    看看我的sn-p:

    function myObj() {}
    myObj.prototype.awesome = function awesome() {
        return arguments.callee.caller.name;
    }
    myObj.prototype.ridiculous = function ridiculous() {
        return this.awesome();
    }
    
    var o = new myObj();
    console.log(o.ridiculous())

    【讨论】:

    • 傻我!阅读您的答案后,这是完全显而易见的。谢谢!
    【解决方案2】:

    这是因为在原型上声明方法时,您应该使用命名函数。

    如:

    function myObj() {}
    myObj.prototype.awesome = function awesome() {
        return arguments.callee.caller.name;
    }
    myObj.prototype.ridiculous = function ridiculous() {
        return this.awesome();
    }
    
    myObj.prototype.ridiculous()
    

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 2020-07-03
      • 2011-11-25
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多