- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我指的是 this article .
在其中,他定义了一个看起来像这样的函数:
function makeClass() {
return function _class() {
if(this instanceof _class) {
if(typeof this.init === 'function') {
this.init.apply(this, arguments);
}
} else {
throw new Error('Constructor called as a function');
}
};
}
然后你可以像这样使用它:
var MyClass = makeClass();
MyClass.prototype = {
init: function(width, height) { ... },
clear: function(ctx) {... },
draw: function(ctx) { ... }
}
但现在我想初始化一些应该在所有实例之间共享的静态变量。我该怎么做?
最佳答案
嗯,最简单的方法是定义一个静态变量作为原型(prototype)属性:
MyClass.prototype.xxx: 3, // ...
var t1 = new MyClass();
console.log(t1.xxx); // 3
...但它不会像其他语言中的静态属性那样表现:
var t2 = new MyClass();
t2.xxx = 5;
console.log(t1.xxx); // still 3 :(
另一种方法是利用属性也可以附加到函数这一事实:
MyClass.xxx = 3;
...但这缩小了我们使用此属性的方式(它不能被前面示例中的 t1.xxx
调用)。
不过,还有另一种方法。可以将静态属性定义为变量,局部于 init
方法,可通过方法访问,定义...也在此 init 方法中。 ) 像这样。
init: function() {
var xxx = 3;
MyClass.prototype.getXXX = function() {
return xxx;
};
MyClass.prototype.setXXX = function(newXXX) {
xxx = newXXX;
}
}
然后所有人都可以通过这个简单地使用这个属性:
var t1 = new MyClass();
var t2 = new MyClass();
console.log(t1.getXXX()); // 3
console.log(t2.getXXX()); // 3
t1.setXXX(5);
console.log(t1.getXXX()); // 5 now
console.log(t2.getXXX()); // 5 as well, behold the power of closures!
这里是 a fiddle用过。
更新:我想,当我们需要使用静态类数据的(某种)容器时,最好使用这种方法,该容器将由所有对象共享 - 但我们不确切知道是什么实际上可以存储在这个容器中。然后我们只使用两个函数 - getStatic
和 setStatic
- 通过字符串键或其他一些标识符来存储和检索数据。这可能看起来有点令人困惑,确实如此,但我认为这可能值得努力。 )
关于javascript - John Resig 的简单类模式的静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11172801/
这需要是一个 C++ 程序: Write a complete C program to enter a first name, middle name and last name in separa
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
有一个大的姓名表,全部为字符串“Name Surname” 需要更新整个表,将字符串设置为“Name FirstLetterOfSurname”,即。 “John Citizen”变为“John C”
$(".name:not(:empty)").text("John"); $(".special").filter( function() { return $(this).text() !=
我正在尝试将一个子集中的所有元组加在一起。 到目前为止我有: list(itertools.combinations(((1, 'aa'), (2, 'bb'), (3, 'cc'), (4, 'dd
涵盖了验证部分。 只是想将电子邮件解析成它们的组件。 假设电子邮件有效... 我能否只向后查找第一个“@”以及之后的所有内容? 然后向后查找一个空格,后面的所有内容都是电子邮件地址减去引用的名称? 最
我正在使用 C# (asp .net),并且我有一个文本框,它接受在数据库上执行查询的名称条目。 我想使用 IN 子句获取所有可能的值,但在我的 C# 页面中我得到 1 个字符串 例如 'john s
以列表(L)为例: 约翰,约翰,约翰,约翰,乔恩 我们要假定一个项目是正确的(例如在这种情况下是约翰),并给出它是正确的概率。第一次(而且很好!)尝试:MostFrequentItem(L).Coun
John Major 等式是否可以证明函数外延性(可能依赖于安全公理)? Goal forall A (P:A->Type) (Q:A->Type) (f:forall a, P a) (g:fora
有一个数组,我想搜索包含'john'(这四个字母)的名字。 bool 值将返回 true。 const dragons = ['Tim', 'Johnathan', 'Sandy', 'Sarah']
为了让我接管 Matrix,我首先需要从中移除 John Wick。他非常善于隐藏(很明显),所以他把自己分成了一个列表和列表中的列表。例如: environment = ["a", [**"j"**
我想找到一段英文文本中嵌入的所有人名,例如 John 等。在 C++ 中执行此操作的最佳方法是什么? 最佳答案 您应该使用工具包 - 请参阅 http://en.wikipedia.org/wiki/
我指的是 this article .我基本上是在创建一个带有 init 函数的类,该函数设置了一个 options 属性。见http://jsbin.com/usaboh/1/edit对于工作示例(
我指的是 this article . 在其中,他定义了一个看起来像这样的函数: function makeClass() { return function _class() {
我正在尝试使用 John Resig 的继承类来扩展我正在开发的一些类。这些类具有被重写的方法。尽管如此,这些方法的原始版本也应该被调用。我的问题是,当我尝试调用父类(super class)上的方法
嘿,我尝试实现 John 制作的一个类 Watermark . 我被困住了,想知道是否有人可以帮助我....添加了提到的 2 个类(class)在 wpf 上:
我有一个看起来像这样的模板: " id="Edit.ID" name="Edit.ID" /> test
在他的书“Javascript Ninja 的 secret ”中,John Resig 写道: Although dynamic code evaluation has been maligned
所以我的目标是使用John Resig's templating engine . 我需要向函数传递一个包含"template"的变量。然而,问题是我需要传递类似的东西: console.log("
我进行了一些研究,但没有发现与我需要的东西完全相关的东西,而且每当尝试创建表达式时,它总是与我的需要有一点偏差。 我尝试了一些类似 [AZaz09]{3,8}\-[AZaz09]{3,8} 的方法。
我是一名优秀的程序员,十分优秀!