【问题标题】:In JavaScript: How do I add a parameter to an existing function?在 JavaScript 中:如何向现有函数添加参数?
【发布时间】:2020-05-26 04:22:39
【问题描述】:

这里是Javascript新手。关于这个主题已经写了很多,但我找不到答案(所以我试图做的可能是错误的形式):

我可以向现有函数添加属性,但我想知道是否可以向函数添加新参数(不只是覆盖函数)。

取一个已有的函数(我正好用这个作为构造函数):

function Employee(name) {
    this.name = name;
}

我想添加一个“工作”属性。我会写

Employee.job = job;

但 Employee 只有一个参数(“姓名”)。我想给 Employee 函数一个额外的参数:“job”。

所以想要的最终结果应该是这样的:

function Employee(name, job) {
    this.name = name;
    this.job = job;
}

有没有办法做到这一点?

【问题讨论】:

  • Employee.job = job; 为函数添加静态属性。使用new Employee() 创建的Employee 实例将无法访问它。你为什么不想改变功能?你唯一能做的就是继承原型并创建一个新函数
  • 你是说运行时的uodate参数吗?
  • 在这种情况下,是的(我正在 Chrome 调试控制台中进行试验),但我有兴趣找到适用于任何场景的解决方案。
  • @adiga 我想在构造函数中添加一个参数,所以job 不是静态的。目标是:当我执行 let employee1 = new Employee (name, job) 时,我可以将我想要的任何名称和工作传递给新对象。
  • 最好的方法是将Employee 函数重写为所需的代码。为什么要动态执行此操作?

标签: javascript function parameters


【解决方案1】:

您可以通过在其顶部添加包装器来覆盖该功能。希望这会有所帮助。

function Employee(name) {
  this.name = name;
}

function createWrapper(functionToWrap){

 return function EmployeeWrapper(name,job){
   let employeeInstance = new functionToWrap(name);
   employeeInstance.job = job;
   return employeeInstance;
  }

}

Employee = createWrapper(Employee);
employeeInstance = new Employee('name','job');

【讨论】:

    【解决方案2】:

    是的,您可以按照问题中的描述进行操作。

    只有一个变化。像 Employee.job = job; 这样直接向构造函数添加变量将使其成为静态的。而是将此变量添加到其对象。看看下面的sn-p...

    <!DOCTYPE HTML>
    <html>
        <body>
    
        <h2>JavaScript Object Constructors</h2>
    
        <p id="demo"></p>
    
        <script>
            // Constructor function for Person objects
            function Person(first, last, age, eye) {
                this.firstName = first;
                this.lastName = last;
                this.age = age;
                this.eyeColor = eye;
            }
    
            // Create 2 Person objects 
            var myFather = new Person("John", "Doe", 50, "blue");
            var myMother = new Person("Sally", "Rally", 48, "green");
    
            // Add nationality to first object
            myFather.nationality = "English";
    
            // Display nationality 
            document.getElementById("demo").innerHTML =
            "My father is " + myFather.nationality; 
        </script>
    
        </body>
    </html>

    【讨论】:

    • @flightPlan 解决了您的问题吗?如果是,那么请接受答案。如果您还需要什么,请告诉我。
    • 嗨@Deepak 谢谢你的回答,但我认为这并不能完全解决它。使用您的示例:我想向“Person 对象的构造函数”本身添加一个参数(在它已经被初始化之后)。因此,每当我使用 new Person 时,新人都会接受“国籍”这一论点。构造函数的第一行是function Person(first, last, age, eye, nationality)
    • 那么,你想改变构造函数的定义,然后想使用更新的构造函数,对吧?
    • 正确。理想情况下不覆盖函数。
    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2019-12-25
    • 1970-01-01
    • 2014-04-25
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多