2017-09-18 19 views
-1

我有如下一個printName功能:如何設置function.prototype.property使用功能名稱

function printName(name) { 
    console.log('Name is': , name); 
} 

現在我想執行printName.callAfter(3000, 'foo'),應登錄

「的名字是: foo'3秒後。

我試着寫:

myName.prototype.callAfter = function(time, name) { 
    setTimeout(function() { 
    printName(name) 
    }, time); 
} 

但它只是讓我myName.prototype.callAfter作爲定義的函數,但myName.callAfter是不確定的。

請幫忙。在此先感謝

+1

在你的'printName'功能,哪裏'name'從何而來?你的意思是接受它作爲參數,還是使用'this.',還是真的來自含有的上下文? –

+1

'myName'沒有被你的代碼定義。你應該得到一個參考錯誤。嘗試提供[mcve] – Quentin

+0

@jass:您的問題中的'printName'不接受任何參數。再說一遍:你的意思是它的參數列表中有'name'嗎?如果是這樣,請編輯該問題以解決該問題。現場示例也屬於**問題(通過Stack Snippets,'[<>]'工具欄按鈕),而不是其他站點。非現場鏈接腐爛,人們不應該離開現場去幫助你。 –

回答

1

你應該申請的原型是(字面意思)Function不是功能的名稱。當你這樣做時,你可以在任何已定義的功能上執行callAfter

下面顯示做你想要的。

function printName(name) { 
 
    console.log('Name is: ' , name); 
 
} 
 

 
Object.defineProperty(Function.prototype, "callAfter", { 
 
    value: function(delay, args) { 
 
    var func = this; 
 
    setTimeout(function(){ 
 
     func.apply(func,args); 
 
    }, delay); 
 
    } 
 
}); 
 
printName("Instant"); 
 
printName.callAfter(3000,["After 3 seconds"]);

*(我使用Object.defineProperty那裏,以便callAfter枚舉,這是擴展內置原型時經常很重要的。)*

你應該請注意,擴展內置對象有一些需要注意的細節。

+0

感謝澄清。這就是我的字面意思:) – jass

-1

我想我有你想在這個的jsfiddle工作內容:https://jsfiddle.net/kd13ugwt/

function printName(name) { 
    console.log('Name is: ' , name); 
} 

printName.callAfter = function(time, name) { 
    setTimeout(function() { 
    printName(name) 
    }, time); 
} 

printName.callAfter(3000, 'foo');