0

如果我有一個程序函數調用另一個這樣的程序功能:爲什麼對象原型方法在OOP無來電顯示不同於過程編程

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

然後我取回名爲「雷人」的來電者。但是當我用oop風格編寫它時,調用方爲空。

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

我在想,爲什麼會發生這種情況,以及如何找回來電者。

回答

1

對象中的鍵和函數的名稱不是一回事。

看看我的片斷:

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

+0

我傻!在閱讀你的答案後,這是完全明顯的。謝謝! – shaedrich

0

這是因爲在聲明原型方法時,你應該使用命名的功能。

如:

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

myObj.prototype.ridiculous() 
+0

啊,謝謝。我會記住這一點 :) – shaedrich

相關問題