一特铝。所有的對象都是通過New函數(shù)創(chuàng)建的:
1. 所有函數(shù)都能產(chǎn)生對象
2. 所有對象都是靠函數(shù)產(chǎn)生的
注意點:對象賦值給變量后祭衩,變量中保存的是地址嚼摩,地址指向?qū)ο笏诘膬?nèi)存
注意點:函數(shù)也是一個對象钦讳,他是通過new Function創(chuàng)建的;
二枕面。原型:
原型的本質(zhì):對象
1. 所有的“函數(shù)”都有原型屬性prototype
prototype中默認包含一個屬性:constructor,該屬性指向函數(shù)本身,也就是說:
Person = Person.prototype.constructor;
Person.prototype = Person.prototype.constructor.prototype;
三愿卒。隱式原型:
1. 所有的對象都有隱式原型"__proto__"屬性;
2. 隱式原型是一個對象潮秘,指向創(chuàng)建該對象的構(gòu)造函數(shù)的原型
3. 在查找對象成員時琼开,若對象本身沒有該成員,則它會到隱式原型上去找
4. 隱式原型和原型出現(xiàn)的根本原因:JS沒有記錄類型的元數(shù)據(jù)枕荞,因此柜候,JS只能通過對象的隱式原型找到它的函數(shù)的原型,從而確定其類型
5. 每個自定義對象函數(shù)都通過自己的隱式原型找到構(gòu)造函數(shù)的原型 person.__proto__ -> Person.prototype
6. 所有函數(shù)原型的隱式原型躏精,最終都指向Object的原型渣刷,所以稱Object是原型鏈的頂端,但是Object.prototype.__proto__ = null
* person.__proto__.constructor.name = Person
* Person.__proto__.constructor = Function () {}
7. Function 的隱式原型:
* 特殊情況:
* Function的隱式原型指向自己
* Object的隱式原型指向null
8.所有對象和函數(shù)都有toString()方法矗烛,在Object的終端原型鏈上
//隱式原型是一個對象辅柴,指向創(chuàng)建該對象的構(gòu)造函數(shù)的對象
function Person() {}
var person = new Person();
person.__proto__ === Person.prototype;//true