gpt4 book ai didi

javascript - "public function can' t be overridden if a patch is necessary 是什么意思 ."in Addy' 揭示模块模式的描述?

转载 作者:可可西里 更新时间:2023-11-01 02:37:06 24 4
gpt4 key购买 nike

A disadvantage of this pattern is that if a private function refers to a public function, that public function can't be overridden if a patch is necessary. This is because the private function will continue to refer to the private implementation and the pattern doesn't apply to public members, only to functions.

有没有人举例说明他的意思?

Link to the Revealing Module Pattern referenced above

最佳答案

将使用对象字面量创建的对象与通过揭示模块模式创建的对象进行比较。

这是作为对象字面量创建的。

function makeGreeter(name){
return {
getName: function(){ return name;},
sayHello: function(){console.log("Hello, " + this.getName());}
}
}

var greeter = makeGreeter("Danny");
greeter.sayHello; // "Hello, Danny"
greeter.getName = function(){ return "George";}
greeter.sayHello(); // "Hello, George"

当您在返回的对象上覆盖公共(public)方法 getName 时,依赖于 getNamesayHello 方法会获取更改。这是因为在对象文字样式中,对公共(public)函数的引用是通过返回的对象 this 进行的。

但是,当您使用揭示模块模式时,

function makeGreeter(name){
var getName = function(){ return name;},
sayHello = function(){console.log("Hello, " + getName());};
return {
getName: getName,
sayHello: sayHello
}
}

var greeter = makeGreeter("Danny");
greeter.sayHello; // "Hello, Danny"
greeter.getName = function(){ return "George";}
greeter.sayHello(); // "Hello, Danny"

RMP greeter 不会选择对公共(public) getName 方法的覆盖。这是因为当 RMP 函数引用其他函数(公共(public)和私有(private)函数)时,它们引用私有(private)闭包副本而不是附加到返回对象的公共(public)函数。

正是出于这个原因,我将 Revealing Module Pattern 视为一种反模式。

关于javascript - "public function can' t be overridden if a patch is necessary 是什么意思 ."in Addy' 揭示模块模式的描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21925720/

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