gpt4 book ai didi

javascript - 构造函数中的私有(private)方法(Javascript,坏主意?)

转载 作者:行者123 更新时间:2023-11-29 19:19:56 25 4
gpt4 key购买 nike

当我们在原型(prototype)对象中声明一个方法时,我们在内存中只有一个位置,稍后我们可以从中调用方法,但是使用私有(private)方法的想法,我们将在每次我们创建一个新 child 时的内存。

为了直观起见,看看下面的两个结构:

function Person(firstname, lastname){
this.firstname = firstname,
this.lastname = lastname
}

Person.prototype.getFullName = function() {
return this.firstname + ' ' + this.lastname;
}

var ham = new Person('Hamoodi', 'Josef');

好的,上面的代码创建了一个方法并将其存储在我们的原型(prototype)对象中,很棒。

function Person(firstname, lastname){
this.firstname = firstname,
this.lastname = lastname,

this.getFullName = function() {
return this.firstname + ' ' + this.lastname;
}
}

根据我的理解(如果我错了请纠正我)这就是我创建私有(private)方法的方式,如果我们需要创建很多 child ,这似乎是个坏主意,或者我只是错过了重点?

有什么想法吗?

最佳答案

您定义 getFullName 函数的方式没有任何隐私。它将在任何 Person 实例上可用,并在每个实例中复制。这就是为什么将方法放在构造函数的原型(prototype)上以便它们在实例之间共享的原因。

如果你真的在你的构造函数中有一个私有(private)函数,它看起来像这样:

function Person(firstname, lastname){
// bind the function to this instance
var getFullName = (function () {
return this.firstname + ' ' + this.lastname;
}).bind(this);

this.firstname = firstname;
this.lastname = lastname;
// call private function and set property
this.fullName = getFullName();
}

这再次受到负面影响,即每个实例都会创建自己的私有(private)方法副本(但至少这次它的范围实际上是私有(private)的)。

私有(private)方法通常作为“实用”类型方法有意义。例如,请考虑以下内容:

// your javascript file
(function (global) {

// private scope
var id = 0,
getId = function () {
return ++id;
};

function Person(firstname, lastname) {
// call private method to get id
this.id = getId();
this.firstname = firstname;
this.lastname = lastname;
}

// expose globally
global.Person = Person;

}(window));

现在,当有人使用您的 API 创建新人时,它会使用私有(private)可用的 getId 函数为该人分配一个唯一 ID。希望这能说明您何时会考虑使用私有(private)状态与原型(prototype)上公开可用的方法。

关于javascript - 构造函数中的私有(private)方法(Javascript,坏主意?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33611806/

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