在下面的一段代码中(从“JavaScript忍者的秘密”中获取的函数的简短版本)我不了解'initializing'变量在声明时的行为,而不是在声明它时。
如果我宣布它,那么它的价值总是假的。我注意到的另一件事是,声明变量的方式仅在proto = new this()时相关,如果proto = new Class(),'initialize'变量具有可预测的行为。有人可以如此善良地向我解释这种行为的动态吗?
Foo.objects.order_by('-frequency')[0:10].bar_set.all()
答案 0 :(得分:0)
感谢您的回复,我不好意思不够清楚。这是另一个尝试:
Object.subClass = function(properties) {
initializing = true;
var proto = new this();
initializing = false;
function Class() {
console.log(initializing)
}
Class.prototype = proto;
Class.constructor = Class;
Class.subClass = arguments.callee;
return Class;
};
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // true
var instance = new subConstructor() // false
Object.subClass = function(properties) {
var initializing = true;
var proto = new this();
initializing = false;
function Class() {
console.log(initializing)
}
Class.prototype = proto;
Class.constructor = Class;
Class.subClass = arguments.callee;
return Class;
};
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // false
var instance = new subConstructor() // false
我知道这是实现基于原型的编程的一种不好的方法,我的问题源于initialize变量的行为。
正如您在Object.subClass的第一个示例中所观察到的那样,未声明的'初始化'变量,在被调用时,根据调用的上下文返回true或false
在Object.subClass的第二个例子中,声明的'初始化'变量,在被调用时,只返回false,无论调用的上下文如何。