1. 程式人生 > >JS中的原型對象與構造器

JS中的原型對象與構造器

輸出 示例 native error 增加 code 當我 span 包含

在Javascript中:
原型對象是屬於構造函數的,不屬於實例;
實例只能共享原型對象中的屬性和方法(當然也可以有自己的屬性和方法,或者覆蓋原型中同名的屬性和方法);
構造器constructor屬於原型的,不屬於實例;
實例之所以能有constructor屬性是因為它共享了原型對象的所有成員,包括原型對象的constructor屬性;

function Wede(){this.name="zhao"}

//輸出構造函數的原型對象
console.log(Wede.prototype); //Wede {}

//給構造函數的原型對象增加成員屬性
Wede.prototype.Sex="man"; //"man"

//new一個實例

var zw=new Wede();

//輸出構造函數的原型對象的constructor屬性
Wede.prototype.constructor; //function Wede(){this.name="zhao"}

//然而,當我們查看構造函數的constructor屬性時,它輸出的是Function構造器
Wede.constructor; //function Function() { [native code] }


//輸出實例共享了原型對象的constructor屬性;
//可以看出,和Wede.prototype.constructor;的輸出是一致的。
zw.constructor; //function Wede(){this.name="zhao"}


//當new一個實例後,該實例內部將包含一個指針(內部屬性)[[Prototype]](或者叫做_proto_),用於指向構造函數的原型對象;
//但是這個指針在腳本中是不可見的,以下示例證明了這一點;
//不過,要明確的一點就是,這個指針存在於實例與構造函數的原型對象之間,而不是實例與構造函數之間;
zw._proto_; //undefined
zw.[[Prototype]]; //SyntaxError: Unexpected token [...

//isPrototypeOf方法用來確定實例本身擁有的[[Prototype]]內部屬性與構造函數的原型對象是否相等。
//這個方法具體還有什麽用處,有待補充......
Wede.prototype.isPrototypeOf(zw); //true

JS中的原型對象與構造器