如何使用函数名设置function.prototype.property

时间:2017-09-18 15:56:01

标签: javascript prototype

我有一个printName函数,如下所示:

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未定义。

请帮忙。提前致谢

2 个答案:

答案 0 :(得分: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,因此queryParams: ['isFromJSP', 'data'], isFromJSP: false, data: [], 不是可枚举的,这在扩展内置原型时经常很重要。) *

你应该知道扩展内置对象有一些需要注意的问题。

答案 1 :(得分:-1)

我想我有你想在这个jsfiddle工作的东西:https://jsfiddle.net/kd13ugwt/

 Option Explicit

Sub createPDFfiles()
    Dim ws As Worksheet
    Dim Fname As String
    Dim mypath As String
    mypath = ActiveWorkbook.path
    For Each ws In ActiveWorkbook.Worksheets
        On Error Resume Next 'Continue if an error occurs

        Fname = mypath & ws.Index & "_result"

        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=Fname, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False
    Next ws
End Sub