与过程编程不同,为什么对象原型方法在 oop 中没有调用者

Why does object prototype methods have no caller in oop unlike in procedural programming

如果我有一个调用另一个程序函数的程序函数,如下所示:

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

然后我找回叫"ridiculous"的来电者。但是当我用 oop-style 写的时候,caller 就是 null。

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

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

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

看看我的代码片段:

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())

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

如:

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

myObj.prototype.ridiculous()