gog*_*net 10 javascript revealing-module-pattern
这种模式的缺点是,如果私有函数引用公共函数,则如果需要补丁,则不能覆盖该公共函数.这是因为私有函数将继续引用私有实现,并且该模式不适用于公共成员,仅适用于函数.
有没有人举例说明他的意思?
I-L*_*Kuo 13
将使用对象文字创建的对象与显示模块模式创建的对象进行比较.
这是一个作为对象文字创建的.
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"
Run Code Online (Sandbox Code Playgroud)
当您getName
在返回的对象上覆盖公共方法时sayHello
,依赖于该方法的方法将getName
获取更改.这是因为在Object Literal样式中,通过this
返回的对象引用公共函数.
但是,当您使用Revealing Module Pattern时,
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"
Run Code Online (Sandbox Code Playgroud)
RMP欢迎不会接受对公共getName
方法的覆盖.这是因为当RMP函数引用其他函数(公共和私有)时,它们引用私有闭包副本而不是附加到返回对象的公共函数.
因此我将Revealing Module Pattern视为反模式.
归档时间: |
|
查看次数: |
1522 次 |
最近记录: |