gpt4 book ai didi

javascript - 这个特定结构有名称吗?

转载 作者:行者123 更新时间:2023-11-30 13:35:42 25 4
gpt4 key购买 nike

例如:

function foo() {
var bar = this.bar = function () {
return "bar";
};
this.mybar = function () {
return bar();
}
}
var myFoo = new foo();
myFoo.bar = function() {
return "notbar";
};
myFoo.bar(); // returns 'notbar'
myFoo.mybar(); // returns "bar"

基本上它允许一个内部私有(private)方法到一个闭包,并有可能只为外部访问而被覆盖。因此,对于闭包中该函数的引用,对原始函数的引用永远不会改变。但是闭包对象的实例化器可以在不破坏对象功能的情况下覆盖该函数。

是否有这个特定构造的名称,它是否有用?

最佳答案

如果您指的是将函数分配给局部变量并在另一个公共(public)方法中使用该函数,那么是的,这将是某种形式的数据封装。除此之外,我想说没有专门的名称。
var bar 是函数的局部变量,this.bar 是新对象的属性。变量和属性恰好具有相同的名称,但它们没有关系。

只有当您想让 bar 中的函数可公开访问并确保其他函数正确工作时,它才有用,以防公共(public) bar 被覆盖。

所以它是一种保护其他功能的形式,但它不是允许外部覆盖的特殊模式。

如果 this.bar 的唯一目的是被覆盖,那么你可以通过以下方式实现相同的目的:

function foo() {
var bar = function () {
return "bar";
};
this.mybar = function () {
return bar();
}
}
var myFoo = new foo();
myFoo.bar = function() {
return "notbar";
};
myFoo.bar(); // returns 'notbar'
myFoo.mybar(); // returns "bar"

当然,如果你在给它分配一个函数之前调用 myFoo.bar(),那么你会得到一个错误。

关于javascript - 这个特定结构有名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991102/

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