js中的原型是指prototype屬性,該屬性指向一個對象(原型對象),當函數建立時會自動爲函數添加該屬性,同時咱們也能夠爲prototype所指向的對象添加屬性和方法,在全部的函數實例對象中均可以訪問到該屬性指向對象下的內容,因此通常狀況下咱們添加的內容都是爲實例所共享的,這也正是原型對象的用途。函數
初始化原型對象:this
function Person(){ this.married = false; Person.prototype.name = "lllin"; Person.prototype.age = "24"; Person.prototype.married = true; }
訪問原型對象中的內容:spa
在原型對象中默認擁有constructor屬性,該屬性指向函數自己。prototype
var person1 = new Person(); var person2 = new Person(); person1.married = "donot know"; console.log(person1.name);//lllin console.log(person2.name);//lllin console.log(person1.constructor);//Person對象自己
同名屬性的覆蓋關係:code
console.log(person1.married);//person1.married>this.married>Person.prototype.married
如何根據實例獲得原型對象:對象
console.log(Person.prototype.isPrototypeOf(person1));//true,判斷Person.prototype是不是person1的原型對象 console.log(Object.getPrototypeOf(person1));//獲得person1的原型對象
判斷屬性存在於實例中仍是原型對象中:blog
hasOwnProperty判斷是不是實例屬性,in判斷屬性是否在對象中。get
console.log(person1.hasOwnProperty("married"));//true console.log(person1.hasOwnProperty("name"));//false console.log("name" in person1);//true,不管屬性在原型對象中仍是在實例中都會返回true /*true:屬性存在原型中,false:屬性存在實例中*/ function hasPrototypeProperty(object,name){ return !object.hasOwnProperty(name)&&(name in object); } console.log(hasPrototypeProperty(person1,"name"));//true
如何獲取原型對象屬性或實例屬性:原型
Object.keys獲得的是實例屬性,原型對象Person.prototype的實例屬性是["name", "age", "married"]io
for(var prop in person1){ console.log(prop);//married,name,age } var keys = Object.keys(person1); var protokeys = Object.keys(Person.prototype); console.log(keys);//["married"] console.log(protokeys);//["name", "age", "married"]