摘要:創建對象創建對象直接量,。原型每一個對象除了都和另一個對象原型相關聯,每個對象都從原型繼承屬性。前邊寫過的一個函數找到中的找到結果是,之前提到的不會修改原型鏈。屬性訪問錯誤拋出異常,因為沒有屬性。存取器屬性讀取寫入可枚舉性可配置性。
1.創建對象
創建:對象直接量、new、Object,create()。
原型:每一個對象(除了null)都和另一個對象(原型)相關聯,每個對象都從原型繼承屬性(prototype)。
//例如 new Array()、[] //創建的對象都繼承自Array.prototype; //Array.prototype又繼承自Object.prototype,由此構成的一系列………………………………就是原型鏈。
創建對象create()的用法:
//create(): var o = Object.create({a:1,b:2}); //如果create(null)的話,他創建的對象不繼承任何。 var o1 = Object.create(Object.prototype); //這樣則和new Object()相同。 //通過原型創建新對象(模擬原型繼承) function inherit(p){ if(p == null){ throw TypeError(); } if(Object.create){ return Object.create(p); } var t = typeOf p; if(t != "object" && t != "function){ throw TypeError(); } function f(){}; f.prototype = p; return new f(); }
2.繼承
what is
it?:假設一個對象obj,并查找他的屬性o1,如果obj中存在則找到,如果不存在會在obj的原型中查找,如果還木有就在原型對象的原型上邊查找,知道找到了或者原型為null了。
var obj = {}; obj.o1 = 1; var p = inherit(obj)//前邊寫過的一個函數; p.o2 = 2; p.o1 = 2; console.log(p.toString());//找到Object.prototype中的toString(); console.log(p.o1);//找到obj.prototype,結果是3,之前提到的不會修改原型鏈。
屬性訪問錯誤:
var obj = {}; console.log(obj.v.length);//拋出異常,因為undefined沒有length屬性。 //可以用下邊的方法↓ var len = obj&&obj.v&&obj.v.length; //利用&&的“短路性”,并在有操作值為true的時候返回其返回值。
3.刪除屬性
delete不可以刪除繼承屬性,要刪除就要在原型對象上刪除,并且會影響所有繼承它的對象。
var obj = {a:1}; delete obj.a;//delete obj["a"];刪除a屬性; delete obj.b;//true delete obj.toString();//true delete 1;//true
4.檢測屬性
in運算符:檢測對象以及對象原型鏈上是否有某屬性;
hasOwnProperty:檢測對象本身是否有某屬性;
propertyIsEnumerable:檢測對象本身是否有某可枚舉屬性;
!==運算符:通過判斷屬性是否!==undefined;
5.枚舉屬性
for/in枚舉:會枚舉出自行添加的屬性,須進行判斷;
//通過判斷來枚舉 for(var i in obj){ if(!obj.hasOwnProperty(i)) continue; } //通過extend來枚舉↓一個不是很完善的extend function extend(obj,obj1){ for(var i in obj1){ obj[i] = obj1[i] } return obj; }
Object.keys()枚舉:ES5;
Object.getOwnPropertyNames()枚舉:ES5。
5.getter和setter
獲取和設置屬性的方法
var obj = { val:100, get getval(){ return this.val; }, set setval(x){ this.val = x; } }
6.屬性的特性
數據屬性:值、可寫性、可枚舉性、可配置性。
存取器屬性:讀取、寫入、可枚舉性、可配置性。
通過Object.getOwnPropertyDescriptor()來獲取自有特性。
通過definedProperty()/definedProperties()設置屬性的特性。
Stronger的extend();
Object.defineProperty(Object.prototype,"extend",{ writable:true, emuerable:false, configration:true, value:function(obj){ var names = Object.getOwnPropertyNames(obj); for(var i = 0 ; igetter&setter老得API,非標準方法
_lookupGetter_ _lookupSetter_ _defineGetter_ _defineSetter_7.原型屬性
用Object.getPrototypeOf()查詢原型。
未完~~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88018.html
摘要:直接量啥意思直接量就是直接用到的數據例如等等。標識符與保留字啥東西標識符簡單講就是用來對變量和函數進行命名的,標識符不可以以數字開頭,可以使用字母和和開頭。數字表示不區分整數和浮點數。范圍精度有限,超出無意義。 1. 直接量 啥意思?直接量就是直接用到的數據~ 例如:10,100,1.1,Hello Word,true,false等等。 2. 標識符與保留字 啥東西?標識符簡單講就...
摘要:和都是循環語句,不同的是檢測表達式的位置。語句異常語句,所謂異常語句是發生異常或錯誤的一個標志或信號。拋出異常就是指這個狀況,捕獲異常實是指處理的過程。語句異常處理機制。語句嚴格模式中禁止使用語句。 1.switch語句 語句都很熟悉的啦,只是提一句。switch中的case語句匹配的規則實際上是===而非簡單的==比較,case匹配不會做任何的類型轉換的。 2.while和do/wh...
摘要:是一個函數還是一個運算符是一個函數但已經被當成運算符對待了。運算符通過其判斷一個對象是否是一個類的實例的時候,判斷會包含對父類的檢測。運算符或對于所有對象都會返回而非例如想要區分和用用上邊的吧。 1.evel是一個函數還是一個運算符? 是一個函數但已經被當成運算符對待了。 evel如果傳入一個非字符串則返回此參數,如是字符串則解析這段字符串。 2.instanceof運算符: 通...
摘要:其中負載均衡那一節,基本上是參考的權威指南負載均衡的內容。開發指南讀了一半,就是看這本書理解了的事件循環。哈哈創京東一本騙錢的書。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊IVWEB團隊 發表于云+社區專欄作者:link 2014年一月以來,自己接觸web前端開發已經兩年多了,記錄一下自己前端學習路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹...
摘要:其中負載均衡那一節,基本上是參考的權威指南負載均衡的內容。開發指南讀了一半,就是看這本書理解了的事件循環。哈哈創京東一本騙錢的書。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊IVWEB團隊 發表于云+社區專欄作者:link 2014年一月以來,自己接觸web前端開發已經兩年多了,記錄一下自己前端學習路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹...
閱讀 1295·2021-11-23 09:51
閱讀 3400·2021-09-06 15:00
閱讀 987·2021-08-16 10:57
閱讀 1371·2019-08-30 12:46
閱讀 933·2019-08-29 12:22
閱讀 1604·2019-08-29 11:07
閱讀 3148·2019-08-26 11:23
閱讀 2980·2019-08-23 15:14