一临庇、創(chuàng)建相同屬性和方法的對象
1、原始方法創(chuàng)建對象
? ? ? ? -- 代碼重復
? ? ? ? var obj1 = {}
? ? ? ? obj1.name = "小紅";
? ? ? ? obj1.age = 12;
? ? ? ? var obj2 = {}
? ? ? ? obj1.name = "小黑";
? ? ? ? obj1.age = 13;
2麸塞、工廠模式
? ? ? ? function createUser(name,age){
? ? ? ? ? ? ? ? var obj = new Object();//創(chuàng)建對象? ? ? ? ? ? ? --獲取原料
? ? ? ? ? ? ? ? obj.name=name;? ? ? ? //給對象添加屬性和方法? ? --加工
? ? ? ? ? ? ? ? obj.age=age;
? ? ? ? ? ? ? ? obj.say = function(){console.log("能吃能睡")}
? ? ? ? ? ? ? ? return obj;? ? ? ? ? //返回對象? ? ? ? ? ? ? ? --出廠
? ? ? ? }
? ? ? ? var obj1 = createUser('小紅',12);
? ? ? ? var obj2 = createUser('小黑',13);
3秃臣、構造函數(shù)this --實例化本構造函數(shù)的對象 (本對象)
? ? ? ? function Createuser(name,age){
? ? ? ? ? ? ? ? this.name=name;
? ? ? ? ? ? ? ? this.age=age;
? ? ? ? ? ? ? ? this.say = function(){console.log("能吃能睡")}
? ? ? ? ? ? ? ? //隱式返回 this
? ? ? ? }
? ? ? ? var obj1 = new Createuser('小紅',12);
? ? ? ? var obj2 = new Createuser('小黑',13);
二、構造函數(shù)
1.別的語言中(class)
2.ECMA定義:
? ? ? ? Constructor?is a function that?creates?and?initializes?the newly created object.
? ? ? ? 構造函數(shù)是用來新建同時初始化一個新對象的函數(shù)
三哪工、構造函數(shù)特點
1.每個對象都有與之相對應的構造函數(shù)
? ? ? ? var arr = new Array();
2.一個構造函數(shù)可以有多個對象
? ? ? ? var arr1 = new Array();
? ? ? ? var arr2 = new Array()
四奥此、構造函數(shù)判斷
? ? ? ? var o = {};var a = [];
? ? ? ? document.write(o instanceof Object);
注意:不能用來判斷數(shù)字和字符串
五弧哎、構造函數(shù)的獲取
? ? ? ? constructor 屬性 -- 所有的對象都具有constructor? 獲取對象的構造函數(shù)
? ? ? ? function demo(){}; demo的構造函數(shù):demo.constructor;
? ? ? ? var num = 10;? ? num 的構造函數(shù)? num.constructor
六、數(shù)字調用constructor 錯誤
? ? ? ? 使用10..constructor
? ? ? ? 使用(10).constructor
七得院、JavaScript中的特殊情況
? ? ? ? Number數(shù)值 在new的時候是一個Object對象但是正常使用是number傻铣。
八章贞、構造函數(shù)與普通函數(shù)
1祥绞、普通函數(shù)
? ? ? ? 不需要用new關鍵字調用
? ? ? ? 可以用return語句返回值
? ? ? ? 函數(shù)內部不建議使用this關鍵字
? ? ? ? 函數(shù)命名以駝峰方式,首字母小寫
2鸭限、構造函數(shù)----涉及更加的底層
? ? ? ? 用new關鍵字調用
? ? ? ? 函數(shù)內部可以使用this關鍵字
? ? ? ? 默認不用return返回值(隱式返回this)
? ? ? ? 函數(shù)命名建議首字母大寫蜕径,與普通函數(shù)區(qū)分開
? ? ? ? 普通函數(shù)可以是構造函數(shù)的一個方法
九、對象的引用比較
? ? ? ? var bool1 = new Boolean(1);
? ? ? ? var bool2 = new Boolean(1);
? ? ? ? console.log(bool1 == bool2);? //返回false ? ?
? ? ? ? var arr1 = [1,2,3];
? ? ? ? var arr2 = [1,2,3];
? ? ? ? console.log(arr1 == arr2);? //返回false
? ? ? ? 原始類型的數(shù)據(jù)比較 只是值的比較
? ? ? ? 對象類型的數(shù)據(jù)比較 需要值和引用地址都相同
十败京、原型
? ? ? ??使用構造函數(shù)每創(chuàng)建一次對象就產生一份方法(屬性)
資源的占用較大
1兜喻、對象的原型prototype讓公用的方法或者屬性在內存中只存在一份
2、每個函數(shù)在創(chuàng)建的時候都自動添加了prototype屬性赡麦,這就是函數(shù)的原型
3朴皆、prototype是函數(shù)的內置屬性
4、原型也是對象
5原型是添加在構造函數(shù)下面的
? ? ? ? 通過new Array() 創(chuàng)建的對象的原型是Array.prototype
? ? ? ? 通過new Date()? 創(chuàng)建的對象的原型是Date.prototype
? ? ? ? ......
? ? ? ? 通過直接量設置的對象? var a = true;
? ? ? ? 原型是a.constructor.prototype
十一泛粹、原型中的屬性(方法) 與 對象中的屬性(方法)區(qū)別
? ? ? ? 類似于:class(原型屬性)? style(普通屬性)
? ? ? ? 對象屬性的優(yōu)先級 >? 原型的屬性優(yōu)先級
? ? ? ? [1,2,3].index = "index";
? ? ? ? Array.prototype.index = "myindex";
? ? ? ? console.log([1,2,3].index);
十二遂铡、將構造函數(shù)中的方法寫在原型中
? ? ? ? function Createuser(name,age){
? ? ? ? ? ? ? ? this.name=name;
? ? ? ? ? ? ? ? this.age=age;
? ? ? ? }
? ? ? ? Createuser.prototype.say = function(){console.log("能吃能睡")}
? ? ? ? var obj1 = new Createuser('小紅',12);
? ? ? ? var obj2 = new Createuser('小黑',13);
? ? ? ? console.log(obj1.say == obj2.say);//返回true
十三、使用 Object.create()創(chuàng)建對象 傳入對象原型
? ? ? ? function Demo(){this.name="小毛"}
? ? ? ? Demo.prototype.add=function(){}
? ? ? ? var index = Object.create(Demo.prototype);
? ? ? ? 傳入null,創(chuàng)建一個沒有原型鏈的對象
? ? ? ? 參數(shù)二:傳入對象描述
? ? ? ? var obj = Object.create(null,{
? ? ? ? ? ? ? ? ? ? ? ? size:{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? value:10
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? })
十四晶姊、獲取對象的原型
? ? ? ?ECMA5新方法:? Object.getPrototypeOf({});
十五扒接、原型中的this
? ? ? ? (本對象)? 調用此方法的對象
? ? ? ? 給數(shù)組原型添加去重的方法
? ? ? ? 關于map? indexOf? 不兼容IE8的問題
十六、原型鏈
? ? ? ? JavaScritp引擎在訪問對象的屬性時们衙,如果在對象本身中沒有找到钾怔,則會去原型鏈中查找,如果找到蒙挑,直接返回值宗侦,如果整個鏈都遍歷且沒有找到屬性,則返回undefined.
十七忆蚀、自定義原型繼承
? ? ? ? Weapon->(sword gun knife)->(武器的展示 描述)
十八矾利、對象的方法
? ? ? ? 對象的方法由:類方法? 對象方法? 原型方法構成
? ? ? ? 對象的屬性由:類屬性? 對象屬性? 原型屬性構成
十九、關于對象的proto
? ? ? ? 對象的內置屬性蜓谋,不是標準的屬性梦皮。IE不支持。
二十桃焕、判斷自有屬性 --hasOwnProperty 返回true | false
? ? ? ? 構造函數(shù)內存在的屬性或者方法屬性自有屬性
? ? ? ? 在原型上添加的不屬于自有屬性
? ? ? ? if (list.hasOwnProperty(i)) {? //獲取一組li? 遍歷
? ? ? ? ? ? ? ? ? ? ? ?document.write(list[i]);
? ? ? ? }