對象 原型和原型鏈

全局對象 global (瀏 window)

global.parseInt()
global.parsefloat()

window的屬性

window可以省略

ECMAScript規(guī)定 私有(Chrome/Firefox)
parseInt alert(彈窗)
parsefloat prompt(彈框提示)
Number() confirm(確認)
String() console(開發(fā)者)
Boolean() document(文檔) DOM
Object() history(瀏覽器)BOM

MDN window 可以查到window所有屬性

四個全局函數 Number()、String()、Boolean()、Object()

簡單類型和對象的區(qū)別

Number()創(chuàng)建一個number類型的對象
1.Number('1')
2.var n = new Number(1)

普通的數字1和對象1 的區(qū)別


image.png

但是js有黑魔法,使得普通數字1也能使用對象1中的方法

var n1 =1;
n1.toString()
n1.valueOf()


臨時創(chuàng)建了一個temp變量
temp = new Number(n1)
temp.toString()
然后再把temp干掉

image.png

String()

跟Number()對象類似

s2.charAt(0) // 獲取對應位置的字符
"a"
s2.charCodeAt(0) // 獲取對應位置的字符的編碼
97

trim() 刪除兩端的空格
concat() 連接兩個字符串
slice(0,2) 切片截取

Boolean()

image.png

千年老坑

falsey值只有 0 NaN '' null undefined 和false
對象都是true
f就是簡單的false
f2 是一個false對象

Object()

var o1 = {}
var o2 = new Object()

Number String Boolean Object

谷內定理:
1.7中數據類型
2.5個falsy
3.內存圖


原型和原型鏈

_ _ proto _ _

image.png

數據結構

var n1 = Number(1)
o1._ proto _ = Number.prototype
o1._ proto . _ proto_ _ = Object.prototype

String.prototype 是 String 的公用屬性的引用
s._ proto _ 是String的公用屬性的引用

image.png
image.png

對象的_ _ proto _ _ === 函數.prototype
共同指向公用屬性

  1. _ proto _ _ = Number.prototype
    '1'. _ _ proto
    _ = String.prototype

重中之重 記住一個公式:對象的_ _ proto _ _ === 函數.prototype

var obj = 函數.prototype
obj._ _ proto _ _ === Object.prototype
函數.prototype._ _ proto _ _ ===Object.prototype

var obj2 = 函數
obj2. _ _proto _ _ === Function.prototype

特殊 Function._ _ proto _ _ === Function.prototype

Function.prototype. _ _ proto _ _ === Object.prototype

注意 Object. _ _ prototype_ _ === Function.prototype

Object.prototype. _ _ proto _ _ === null

高程上的原型對象:
無論什么時候,只要創(chuàng)建了一個新函數,就會根據一組特定的規(guī)則為該函數創(chuàng)建一個 prototype屬性,這個屬性指向函數的原型對象。在默認情況下,所有原型對象都會自動獲得一個 constructor(構造函數)屬性,這個屬性包含一個指向 prototype 屬性所在函數的指針。

高程原型鏈:
利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。簡單回顧一下構造函數、原型和實例的關系:每個構造函數都有一個原型對象,原型對象都包含一個指向構造函數的指針,而實例都包含一個指向原型
對象的內部指針。那么,假如我們讓原型對象等于另一個類型的實例,結果會怎么樣呢?顯然,此時的原型對象將包含一個指向另一個原型的指針,相應地,另一個原型中也包含著一個指向另一個構造函數的指針。假如另一個原型又是另一個類型的實例,那么上述關系依然成立,如此層層遞進,就構成了實例與原型的鏈條。這就是所謂原型鏈的基本概念

實現原型鏈有一種基本模式,其代碼大致如下。
function SuperType(){
this.property = true;
}

SuperType.prototype.getSuperValue = function(){
return this.property;
};
function SubType(){
this.subproperty = false;
}
//繼承了 SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function (){
return this.subproperty;
};
var instance = new SubType();
alert(instance.getSuperValue()); //true

SuperType 和 SubType。每個類型分別有一個屬性和一個方法。它們
的主要區(qū)別是 SubType 繼承了 SuperType,而繼承是通過創(chuàng)建 SuperType 的實例,并將該實例賦給SubType.prototype 實現的。實現的本質是重寫原型對象,代之以一個新類型的實例。換句話說,原來存在于 SuperType 的實例中的所有屬性和方法,現在也存在SubType.prototype 中了。在確立了繼承關系之后,我們給 SubType.prototype 添加了一個方法,這樣就在繼承了 SuperType 的屬性和方法的基礎上又添加了一個新方法。這個例子中的實例以及構造函數和原型之間的關系如圖 6-4 所示。

構造函數里的方法存放在原型對象中,屬性放在實例中

image.png

1.toString() 錯誤
1..toString()正常
為什么呢? 因為瀏覽器無法判斷那個點是小數點還是一個對象調用方法的點,所以第一個會錯誤,而第二個式子一個給小數點,一個給屬性自然會成功,只要讓瀏覽器知道這個點的作用
同理:1. toString() 也會成功

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容