gpt4 book ai didi

JavaScript - 推荐的可测试模式

转载 作者:行者123 更新时间:2023-11-30 10:53:24 26 4
gpt4 key购买 nike

我阅读了大约 2 种 JavaScript 可测试模式,但我不确定它们有何不同以及我应该使用哪一种。

模式一:

function class () {
this.propertyA = null;
this.methodA = function() {
alert('');
}
}

var object = new class();
object.methodA();

模式二:

var object = (function() {
var propertyA = null;
return {
methodA: function() {
alert('');
}
}
}());
var object = new class();
object.methodA();

有什么区别?我应该使用哪一个来使用 jQuery 的 QUnit 进行单元测试?请注意,jQuery 插件不是满足我的要求的选项(不是 UI 测试,仅业务逻辑)。谢谢。

最佳答案

QUnit 并不关心其中一种方式。它基本上是一个为断言提供漂亮输出的包装器。

至于这两种模式之间的区别,模式 1(如您所实现的那样)具有所有公共(public)属性。不过,您可以使用私有(private)属性:

function class () {
var propertyA = null;
this.methodA = function() {
alert('');
}
}

var object = new class();
object.methodA();

模式 2 实际上不起作用。您只是提供了一个包含在闭包中的结果对象,因此您不能真正对其调用 new。你需要这样做:

var class = (function() {
var propertyA = null;
return function () {
return {
methodA: function() {
alert('');
}
};
}
}());
var object = new class();
object.methodA();

new 关键字的全部要点在于,它使用绑定(bind)到 this 的新变量调用对象的构造函数。如果您没有构造函数,那么您只是在创建一个单例。

出于实际目的,这里是正在发生的事情:

  • 在模式 1 中,为类的每个实例创建一个新的 propertyA
  • 在模式 2 中(如您所实现的那样),您将创建一个单例对象。
  • 在模式 2 中(如我所实现的那样),所有实例共享一个 propertyA(就像 C++ 中的静态成员)。

这是因为在模式 1 中,您要创建一个简单的构造函数,它会为每次调用 new 的公共(public)方法创建一个新的闭包。而在模式 2 中,您将围绕构造函数创建一个闭包并在构造函数范围之外声明变量。

关于JavaScript - 推荐的可测试模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3944214/

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