有人可以解釋爲什麼我們有這種行爲?據我所知,它應該像這樣,但我無法解釋Js繼承和instanceof
function foo() {}
function foo1() {}
foo.prototype = foo1.prototype = {};
var _foo = new foo();
alert(_foo instanceof foo1); // true
有人可以解釋爲什麼我們有這種行爲?據我所知,它應該像這樣,但我無法解釋Js繼承和instanceof
function foo() {}
function foo1() {}
foo.prototype = foo1.prototype = {};
var _foo = new foo();
alert(_foo instanceof foo1); // true
在JavaScript中,使用對象。
我認爲這是比較容易理解,如果你比較這對更熟悉的物體
//defines a "class" Person
function Person() {}
//defines a "class" Animal
function Animal() {}
變化Animal
和Person
原型
Person.prototype = Animal.prototype = {};
原型可以用來擴展「類」,例如
function Person(name){
this.name=name;
}
Person.prototype.nameInUperCase=function(){
return this.name.toUpperCase();
}
實例化
var myPerson = new Person();
檢查我的人是否是實例。
// true because you instantiate the same prototype
// remember Person.prototype = Animal.prototype = {};
alert(myPerson instanceof Animal);
的instanceof
運營商檢查是否左邊的操作數是在其原型鏈的原型對象的對象右手操作數。由於你的兩個函數共享同一個原型對象,所以一個實例被視爲另一個的實例。
o instanceof f
檢查f.prototype
引用的對象是否出現在原型鏈o
的任何地方。在你的情況下,因爲foo.prototype
和foo1.prototype
都涉及同一個對象,所以通過new foo
或new foo1
創建的任何對象都將爲instanceof
foo
和foo1
。
這是覆蓋在規範的以下部分:Runtime Semantics: InstanceofOperator(O, C),Function.prototype[@@hasInstance] (V)和OrdinaryHasInstance (C, O),大部分工作在最後一個環節正在做,步驟4到7(7具有通過o
的原型爲循環分步驟鏈)。