- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Google 搜索但没有找到适当的资源来解释使用显示模块模式和 this
之间的区别关键字。
当使用揭示模块模式时,我可以使用以下代码:
var moduleRevealing = function() {
var talk = function() {
console.log("Talking....");
};
var walk = function() {
console.log("Walking...");
};
return {
talk: talk,
walk: walk
}
};
console.log('Module Pattern Object');
console.log(moduleRevealing());
现在使用 this
可以实现同样的效果关键字如下:
var module = function() {
var talk = function() {
console.log("Talking....");
};
this.walk = function() {
console.log("Walking...");
};
this.talk = talk;
};
var mod1 = new module();
console.log('Module Object');
console.log(mod1);
两者有何不同?我只能看到一个区别,那就是 __proto
;前者指向Object
而后者是 module
.
如果有人想查看代码 - Fiddle
最佳答案
在你的简单示例中没有什么区别,但让我让它变得更复杂一点。
var moduleRevealing = function() {
var talk = function() {
console.log("Talking....");
};
var walk = function() {
console.log("Walking...");
};
var walkAndTalk = function(){
walk();
talk();
};
return {
talk: talk,
walk: walk,
walkAndTalk: walkAndTalk
}
};
使用这个
,
var module = function() {
var talk = function() {
console.log("Talking....");
};
this.walk = function() {
console.log("Walking...");
};
this.talk = talk;
this.walkAndTalk = function(){
this.walk();
this.talk();
}
};
当您重写这两个稍微复杂的示例的方法时,它们的行为现在会非常不同。
var modR = moduleRevealing();
var mod1 = new module();
modR.walk = function() {console.log('FAST Walking...");}
mod1.walk = function() {console.log('FAST Walking...");}
modR.walk(); // outputs "FAST Walking..."
modl.walk(); // outputs "FAST Walking..."
modR.walkAndTalk(); // outputs "Walking ... Talking..."
mod1.walkAndTalk(); // outputs "FAST Walking...Talking..."
请注意,即使 walk()
的输出发生更改,当您覆盖使用 Revealing Module 创建的实例时,依赖方法 walkAndTalk()< 也不会拾取该更改
。根本原因是,Revealing Module 模式鼓励那些懒得正确学习 this
的人不加区别地使用 javaScript 闭包。看这个post of mine比较模块模式变体之间的差异。
关于javascript - 揭示模块模式和简单构造函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35581704/
我有一个交互网络,我使用以下代码制作邻接矩阵,随后计算网络节点之间的相异性,然后将它们聚类以形成模块: ADJ1=abs(adjacent-mat)^6 dissADJ1% as.dist %
对这些东西仍然很陌生,所以我希望我对问题的描述是准确的。 我刚刚插入 Zurb Reveal,并使用 在页面加载时使其正常工作 $(document).ready(function (){ $
我正在对分类数据进行聚类分析,因此使用 k-modes 方法。 我的数据被塑造成一个偏好调查: 你喜欢头发和眼睛吗? 受访者可以从固定(多项选择)的 4 种可能性中选出一个答案。 因此,我得到了假人,
我正在尝试了解(Revealing) Module Pattern 中的public` 属性 是如何工作的。 Carl Danley "The Revealing Module Pattern"指出的
Python 中有一个非常方便的函数:repr()当应用于包含空白字符的字符串时,将打印出该字符串的表示,不会导致对字符串实际内容的任何人为误解。 例如: $ python -c "print rep
我已经安装了 Foundation 6,到目前为止一切似乎都工作正常。现在我想添加一个显示模式。添加了 jQuery v2.2.4 并加载了必要的库,如下所示: FOUNDATION_VERSION
我是一名优秀的程序员,十分优秀!