1.有兩種方式提供調用其他對象的方法:
call
apply
var typeStr=Object.prototype.toString.call(想獲取類型的對象);
typeStr=typeStr.slice(8,-1);
3.自定義構造函數:
function Animal(name,type,barkWay){
this.name=name;
this.type=type;
this.barkWay=barkWay;
}
var dog=new Animal("jj","hh",function(){
console();
});
優化:爲了處理函數方法中有相同的代碼段 造成資源浪費,要讓所有的函數公用一個函數。
但是這種方法也有弊端,增加了全局變量,造成結構混亂。
解決:用原型:
原型:在創建構造方法的時候,系統會默認關聯一個神祕對象,這個對象爲原型。
原型中的屬性和方法可以被使用該構造函數創建出來的對象
原型使用方法:1)利用原型的動態特性給原型對象添加成員
構造函數.prototype.方法名=function(){}
p.方法名();
2)直接替換原型對象
構造函數.prototype={};
注意事項:
1.使用對象訪問屬性時,如果在本身內找不到就會去原型中查找但是使用點語法進行屬性賦 值的時候,並不會去原型中查找
使用點語法進行屬性賦值時,如果對象中不存在該屬性,就會給該對象新增屬性2.若原型中的屬性是引用類型的屬性,那麼所有的對象共享該屬性,並且一個對象修改了該 引用類型屬性中的成員,其他對象也都會受影響
3.一般情況下不會將屬性放到原型對象中, 一般情況下原型中只會放需要共享的方法
4.在使用新的對象替換掉默認的原型對象之後
原型對象中的constructor屬性會變成 Object
爲了保證整個 構造函數---原型----對象 之間的關係的合理性
應做如下操作:
在替換原型對象的時候,在新的原型對象中手動添加 constructor 屬性
Person.prototype = {
constructor : Person
};
4.對象:封裝 繼承(for in) 多態(強類型有 弱類型沒有)
for in混入式繼承:在for循環中,可以使用對象的屬性和方法,也可以賦值。
for(var k in obj1){
obj[k]=obj1[k] //不能使用點的方式
}