我想知道,new
在JavaScript中使用运算符创建对象时的变量范围是什么?
function A(){
this.a = 1; // instance property
}
function B(){
this.a = 3; // instance property
}
Run Code Online (Sandbox Code Playgroud)
案例1:我理解这一点
// assign again prototype a property as 2
A.prototype.a = 2 ;// prototype property
var obj = new A();
console.log( obj instanceof A );
console.log( obj.a == 1 );
Run Code Online (Sandbox Code Playgroud)
情况2:将构造函数更改为B引用
A.prototype.constructor = B;
A.prototype.a = 2 ;// prototype property
var obj = new A();
console.log( obj instanceof B ); // false, as I expected
console.log( obj.a == 1 ); // still 1 why ?
Run Code Online (Sandbox Code Playgroud)
案例3: 无效范围
A.prototype = new B();
A.prototype.a = 4 ;// prototype property
var obj = new A();
console.log( obj instanceof B ); // true , as I expected
console.log( obj.a == 1 ); // still 1 why ?
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,但找不到正确的解释.
Prototype在运行对象初始化代码之前分配/绑定到对象
> function A() { console.log(this.a); this.a = 1; console.log(this.a); };
undefined
> new A();
undefined
1
A {a: 1}
> A.prototype.a = 2;
2
> new A();
2
1
A {a: 1, a: 2}
Run Code Online (Sandbox Code Playgroud)
在函数初始化代码中,在为Aa的原型分配之前,第一个console.log是未定义的.分配原型Aa后,第一个consol.log正确显示为(2)然后this.a被指定为1,第二个console.log正确显示为(1)