- 類
- 原型
- 原型鏈
比如:
window對象
string對象
substring / indexof
number對象
tostring
function對象
call / bind
array對象
concat / join
- array number 可以通過 prototype 找到自己的原型鏈
- string 通過 typeof 找到自己的原型鏈
- 數組通過 constructor 找到自己的原型鏈
所有的類都繼承於 object ,而 object 有靠着window 活着。
再比如
你給object 添加一個 a 屬性,那麼string,數組等等 一切繼承於object的對象,便都會多出來這個屬性。
或者 還可以 採用 下圖的方式:
在補充兩個
再再再比如,代碼如下:
<script type="text/javascript">
function show(){
console.log(Object.prototype.toString.call(arguments));
}
show();
</script>
運行結果如下
這篇真不好意思,寫的太亂了,就這樣,還想插句別的話。
內心不夠篤定的人,便總會覺得這個世界也不夠穩定。
他總以爲是世界在動盪,其實是他的內心不夠安定。
不同對象互相借用method
// 本來的,字符串的小區別
var str = "str===stringToArray";
console.log(str.split(''));
var strA = ["strA===stringToArray"];
// 這樣不行,這樣會報錯
// 00_ES6_demo6_面向對象.html:24 Uncaught TypeError: strA.split is not a function
// 數組不提供這個方法。
// console.log(strA.split(''));
// 怎麼辦 ? =》
// 因爲數組自己沒有split這個方法
// 所以數組就找字符串去借用這個函數(用call的方式)
console.log(String.prototype.split.call(strA));
// 字符串也找數組去借個函數(用bind的方式)
console.log(Array.prototype.join.bind('abcdef')());
運行結果
json對象借用string類型的示例:
var json = {a:20,b:30,length:2};
console.log(String.prototype.indexOf.call(json.a,0));
// 如果是json的話,那麼就相當於 json.toStirng()
// 所以輸出來的是 [object Object]
// 所以用的字符串的方法,處理的也都是 [object Object]
// 相當於'[object Object]'.indexOf('o');
console.log(String.prototype.indexOf.call(json,'o'));
// 相當於'[object Object]'.substring(0);
console.log(String.prototype.substring.call(json,0));
// 相當於'[object Object]'.substring(6,7);
// from 6 to 7
console.log(String.prototype.substring.call(json,6,7));
運行結果
總結
// 原型鏈
// 下面的那個a 呀 b 呀好像就是show的原型鏈,他是個鏈
function show(){
console.log(1);
}
var a = show;
console.log("console.log(a);");
console.log(a);
console.log("console.log(a.prototype);");
console.log(a.prototype);
console.log("new a();");
new a();
// 給show追加一個 屬性
show.prototype.addprop = function (){
console.log("show.prototype.addprop");
}
// 調用
console.log("var b = new show();");
var b = new show();
b.addprop();
運行結果:
constructor() 是class 被new 對象的時候 ,最先執行的函數。
舉個例子: