次のコード(「JavaScript Ninjaの秘密」から取得した関数の短いバージョン)では、「初期化」変数が宣言されているときの動作を理解していませんそれが宣言されていないときに反対している。宣言された変数とjs関数の宣言されていない変数
私がそれを宣言すれば、値は常に偽になります。私が気づいたもう一つのことは、変数が宣言される方法は、proto = new this()、proto = new Class()の場合、 'initialize'変数が予測可能な振る舞いを持つ場合にのみ関係するということです。このような行動のダイナミクスを私に説明するほど親切な人がいますか?お返事のための
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
// if var initializing = true;
var proto = new this();
initializing = false;
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // false
var instance = new subConstructor() // false
参考までに、この例ではJavaScriptで行うべきではないことがたくさんあります。継承を実装するのは間違った方法です。 –
あなたが求めていることはまったく明らかではありません。 ''初期化 'は、' '宣言したときに常に' 'false 'であると話しました。これは間違っています(' '宣言されていない' 'var''宣言で上のコードを実行します。 '' false')。また、スニペットはエラーをスローします。あなたが尋ねていることを示すコード(宣言の有無にかかわらず)を正確に更新してください。 –
Madaraが言ったように、これは継承を実装するための真剣に欠陥のある方法です。引数のない間違った時刻にスーパークラスのコンストラクタを呼び出します。どうやらこれは 'initializing'フラグが修正しようとしているものですが、それは間違っているだけです。 –