JavaScript原型到原型鏈javascript
函數的prototype屬性指向了一個對象,這個對象正是調用該構造函數而建立的實例的原型 什麼是原型呢? 每個JavaScript對象(null除外)在建立的時候就會與之關聯另外一個對象,這個對象就是咱們所說的原型,每個對象都會從原型繼承屬性。
1. 每個對象(null除外)都有__proto__屬性java
這個屬性會指向該對象的原型
1. 構造函數的prototype 指向的是 實例對象的原型函數
function Person(){ } var person1 = new Person() console.log(person1.__proto__ === Person.prototype). //true
1. constructorspa
都一個原型都有constructor屬性指向關聯的構造函數 function Person(){ } var person1 = new Person() console.log(Person===Person.prototype.constructor). // true console.log(Person===person1.__proto__.constructor) // true // ES5獲取原型的方法 console.log(Person.prototype === Object.getPrototypeOf(person1))
實例和原型prototype
function Person(){ } Person.prototype.name='hy' var person1 = newPerson() person1.name='ycl' console.log(person1.name)// ycl delete person1.name console.log(person1.name)// hy 在這個例子中,咱們給實例對象 person1 添加了 name 屬性,當咱們打印 person1.name 的時候,結果天然爲 ycl。 可是當咱們刪除了 person1 的 name 屬性時,讀取 person1.name,從 person1 對象中找不到 name 屬性就會從 person 的原型也就是 person.__proto__ ,也就是 Person.prototype中查找,幸運的是咱們找到了 name 屬性,結果爲 hy。 可是萬一尚未找到呢?原型的原型又是什麼呢?
原型的原型code
var obj = new Object() obj.name='hy' console.log(obj) // 其實原型對象就是經過Object構造函數生成的,結合以前所講,實例經過__proto__指向構造函數的prototype
console.log(Object.prototype.__proto__===null)//true
console.log(person1.constructor===Person.prototype.constructor)