原型模式

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"]
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息