js原型鏈
1、自定義函數與 Function的關系:
①本地對象:獨立於宿主環境(瀏覽器)的對象——包括Object、Array、Date、RegExp、Function、Error、Number、String、Boolean
②內置對象——包括Math、Global(window,在js中就是全局變量),使用的時候不需要new
③宿主對象——包括自定義對象、DOM、BOM
故所有的函數都是 Function 的實例;
2、構造函數、原型和實例的關系:
①在構造函數上都有一個原型屬性 prototype,該屬性也是一個對象;
②原型對象上有一個 constructor 屬性,該屬性指向的就是構造函數;
③實例對象上有一個 _proto_ 屬性,該屬性也指向原型對象,並且該屬性不是標準屬性,不可以用在編程中,該屬性用於瀏覽器內部使用。
3、prototype與_proto_的關系:
prototype是構造函數的屬性,_proto_是實例對象的屬性,這兩者都指向同一個對象
4、函數與對象:
對象的本質:無序的鍵值對集合;鍵值對當中的值可以是任意數據類型的值;
對象就是一個容器,這個容器當中放的是(屬性和方法)
故函數也是對象,對象不一定是函數;
5、屬性搜索
①在訪問對象的某個成員的時候會先在對象中找是否存在
②如果當前對象中沒有就在構造函數的原型對象中找
③如果原型對象中沒有找到就到原型對象的原型上找
④知道Object的原型對象的原型是null為止
6、試一試
function Foo(){
getName=function(){
alert(1);
};
return this;
}
Foo.getName =function(){
alert(2);
}
Foo.prototype.getName=function(){
alert(3);
}
var getName=function(){
alert(4);
}
function getName(){
alert(5);
}
打印:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
js原型鏈