一、例項化物件: 給物件增加屬性和方法
function person(name, age)
person.prototype.sayhi = function()
任何乙個建構函式都有乙個屬性 prototype 原型二、建構函式與原型和例項的關係這個原型是乙個物件,這個物件中所有的屬性和方法都可以可以被建構函式建立的例項訪問。
1. 建構函式和原型的關係: 配偶的關係 每乙個建構函式都會有乙個對應的原型, 建構函式的prototype屬性指向了原型物件, 原型物件的constructor屬性指向了建構函式。三、原型鏈2. 建構函式 和例項的關係: 母子關係,例項 是由建構函式new出來的, 並且例項的屬性是在建構函式中增加的
3. 原型物件與例項的關係: 父子,原型物件中所有的成員 都可以 被例項訪問。 例項.__proto__ = person.prototype
任何乙個物件都會有原型,原型又是個物件, 原型物件還會有原型,一環扣一環,原型之間就組成了原型鏈。乙個物件,除了可以訪問自己的成員, 還可以訪問原型的成員,可以訪問整條原型鏈上的成員。
function person(name, age)
person.prototype.money = 100;
person.prototype.car = '摩拜';
person.prototype.sayhi = function()
原型鏈: p -----> p.__proto___(person.prototype) ----> p.__proto__.__proto__四、object.prototypevar p = new person('zs', 18);
console.log(p.money);// 100
console.log(p.tostring());// [object object]
所有的物件都有原型 ,所有物件的原型鏈的盡頭一定是object.prototype五、hasownproperty:用於判斷 某個屬性是否是物件自己的,而不是繼承來的object.prototype中的成員是可以被所有物件訪問的。
object.prototype.money = 1000;
var obj = ;
判斷name是否是obj物件自己的屬性
var result = obj.hasownproperty('money');六、a.isprototypeof(b) : 判斷a是否是b的原型console.log(result);// false
function person(name)
var p = new person();
console.log(person.isprototypeof(p));// falsetypeof: 僅僅能夠判斷簡單的資料型別,對於複雜的資料型別,返回的全是objectconsole.log(person.prototype.isprototypeof(p));// true
console.log(object.prototype.isprototypeof(p));// true
嚴格的判斷乙個物件的型別,應該用instranceof
七、a instanceof b: 判斷a是否是b的例項(內在的邏輯是:判斷b的原型是否在a的原型鏈上)
function person(name)
var p = new person();
// 原型鏈:p -----> person.prototype ------> object.prototype任何物件 instanceof object trueconsole.log(p instanceof person);// true
console.log(p instanceof object);// true
任意的函式 instance function true
function ---> function.prototype ---> object.prototype ---> null
object ------ > function.prototype ----> object.prototype ---> null
所有的函式都是由function建立出來,所有函式.__proto__ 都是function.prototype
所有的原型都是由object建立出來 所有原型.__proto__ 都是object.prototype
function 建構函式也是函式, function的媽媽 是function function的爸爸 是function.prototype
function fn() {}
fn.money = 100
fn.prototype.car = '瑪莎拉蒂'
function.prototype.house = '別墅'
object.prototype.girl = '小姐姐'
var f = new fn()
// f---> fn.prototype ----> object.prototype
// console.log(f.money) // undefined
// console.log(f.car) // 瑪莎拉蒂
// console.log(f.house) // undefined
// console.log(f.girl) // 小姐姐
// fn ---> function.prototype ---> object.prototype
console.log(fn.money) // 100
console.log(fn.car) // undefined
console.log(fn.house) // 別墅
console.log(fn.girl) // 小姐姐
原型 原型鏈 繼承
原型 是function物件的乙個屬性,它定義了建構函式 製造出的物件 的公共祖先。通過該建構函式產生的物件,可以繼承該原型的屬性和方法。原型也是物件 這定義有點模糊,用 解釋一下 我們在控制台中列印出了這個,首先son物件的建構函式是foo,但是我們的foo中什麼屬性都沒有,怎麼會出現乙個 pro...
原型 原型鏈 繼承
在 js 中,一切皆物件!下面就讓我們從建立物件開始,逐步學習js中的核心知識 原型,原型鏈,繼承等 1.字面量方式建立物件 var obj var obj1 2.使用 new object 的方式建立物件 var obj2 new object obj2.name 張三 obj2.age 13 o...
原型鏈繼承
原型及原型鏈 1.所有的函式都有乙個prototype的屬性 指標 該屬性指向了這個函式的原型物件。2.所有的物件都有乙個 proto 的屬性 指標 該屬性指向了這個物件的原型物件。每乙個原型物件也都有乙個 proto 的屬性,指向它的父級原型物件,最終指向null物件 原型鏈 3.第乙個原型物件都...