當建立了乙個函式時,就會根據一組特定的規則為該函式建立乙個 prototype 屬性,這個屬性指向函式的原型物件。在預設情況下,所有原型物件都會自動獲得乙個constructor 的屬性 這個屬性指向乙個prototype
屬性所在函式的指標
看個例子
當person物件被建立後person物件會有乙個prototype屬性,它指向了預設為person建立乙個原型物件 person prototype 這裡邊有個屬性 constructor它保留了 物件person的引用
如果繼續為原型物件新增其它方法,其方法都會在 person prototype原型物件中
如果例項化了乙個person物件那他的例項同樣也是會指向 person的原型物件,從而最終物件的所有例項都可訪問這個原型物件中的屬性
function因為物件例項中的[prototype]屬性是指向原型物件的,所以給原型物件新增的方法對所有例項共享person(){}
person.prototype.getname =function()
var person1 = new
person();
var person2 = new
person();
console.log(person1.getname());
//zhang
console.log(person2.getname());//
zhang
原型重寫
function某些情況下,想將原型物件中的方法定義在乙個物件中時,可以直接重寫原型物件。因為所有物件都是繼承自object物件,所以所果重寫原型後沒有將contructor的指向重新指回person的話,其constructor屬性就會預設指向ojbectperson(){}
person.prototype.getname =function()
//重寫原型物件
person.prototype =
}
如下例,也就是說重寫後不進行重新指向,會切段物件與原型物件的關係
var friend = newperson.prototype.constructor();
console.log(friend.constructor == object);//
false
functionsupertype(){}
supertype.prototype.getname= function
()
function
subtype(){}
subtype.prototype = new
supertype();
var sub = new
subtype();
console.log(sub.getname());
//zhang 可以訪問super原型物件的方法
//constructor指向了supertype
getprototypeof() 是es5中用來得到obj物件的原型物件的標準方法 object.getprototypeof(sub)==subtype.prototype //true
isprototypeof //是用來判斷要檢查其原型鏈的物件是否存在於指定物件例項中,是則返回true,否則返回false
hasownprototype //是用來判斷乙個物件是否有你給出名稱的屬性或物件。不過需要注意的是,此方法無法檢查該物件的原型鏈中是否具有該屬性,該屬性必須是物件本身的乙個成員
hasprototypeproperty //是否為原型物件的屬性
__proto__ 就是prototype物件
JS 物件 JS原型 原型鏈
參考學習 js物件 構造器函式 建立物件的函式。物件分為普通物件和函式物件。所有物件都有 proto 屬性 函式物件不止有 proto 屬性,還有prototype屬性 稱為原型物件 1.new function 產生的物件都是函式物件。2.所有函式物件的 proto 都指向function.pro...
簡單了解prototype原型
prototype是典型物件導向語言,在js中經常用到class 類 類就是物件的方法,物件就是類的例項。1.建構函式 constructor 建構函式,就是提供了乙個生成物件的模板並描述物件的基本結構的函式。特點 1 乙個建構函式,可以生成多個物件,每個物件都有相同的結構。2 建構函式的函式名首字...
清晰了解原型鏈
看完這段 核心 原型物件和原型鏈 function person name,age person.prototype.name 名字 person.prototype.age 99 person.prototype.showname function person.prototype.showage...