gpt4 book ai didi

javascript - 如何使构造函数参数可用于原型(prototype)函数 JavaScript

转载 作者:行者123 更新时间:2023-11-30 12:41:22 30 4
gpt4 key购买 nike

在下面的简化示例中,MyService.doSomething 函数可以访问 someDependency,因为原型(prototype)函数是在 MyService 构造函数中定义的。

// Define MyService Class
function MyService(someDependency) {
MyService.prototype.doSomething = function(){
return someDependency.doSomething();
}
}

要使用具有给定依赖项的 MyService:

// Construct MyService
var myService = new MyService(someDependency);
var result = myService.doSomething();

我很确定这是不好的做法,但我如何使构造函数参数 someDependency 可用于该函数?

最佳答案

首先,您应该在定义构造函数的同时初始化原型(prototype),而不是每次创建新实例时都重新定义它。

// Define MyService Class
function MyService(someDependency) {
// ...
}

MyService.prototype.doSomething = function(){
// ...
}

之后,剩下要做的就是将参数显式复制到实例变量中

// Define MyService Class
function MyService(someDependency) {
this.someDependency = someDependency;
}

MyService.prototype.doSomething = function(){
return this.someDependency.doSomething();
}

所有实例变量都是公开的。如果您愿意,可以使用命名约定(例如以下划线开头)来标记“伪私有(private)”变量。

如果您想直接使用函数参数而不是分配实例变量,您可以让方法成为属于您的对象的闭包,而不是原型(prototype)中的共享函数。这使您可以使用构造函数中的变量(并且这些变量是私有(private)的!),但会使创建子类变得更加困难。

function MyService(someDependency) {
this.doSomething = function(){
return someDependency.doSomething();
};
}

带闭包的版本可能比原型(prototype)版本慢,但大多数时候我不会担心 i。

关于javascript - 如何使构造函数参数可用于原型(prototype)函数 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345819/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com