js對象

js對象

來自專欄劉卿的技術思維

程序員的世界裡有一個梗就是你可以new 一個對象,不過在js的世界中對象到是什麼?

對象:

  • 屬性的無序集合。
  • 每一個屬性存放一個原始值、對象、函數。如果是函數,他被看做對象的方法,否則該特性被看做屬性。
  • 對象都是由類定義的。
  • 對象的實體(物理表示)其實不可以直接訪問。創建對象後在變數中存儲的都是對象的引用。
  • 對象的廢棄其實是由GC來操作的。當沒有對象引用的時候,該對象在一定時間後被回收。可以通過把對象設置為null,來強制回收。

比較遺憾的是js的世界中木有類。ps:es6中已經有了!

面向對象的要求:

  • 封裝
  • 聚集
  • 繼承
  • 多態

實例化對象

對象是用關鍵字 new 後跟實例化的類的名字創建。所以來new一個女朋友吧。

function GirlFriend(){};var girlFriend = new GirlFriend();

作用域

既然說到作用域,其實就直觀的判斷出來,存在2個作用域,公共的和私有的。

//共有的var a = 1;(function(){ //屬於該匿名函數中的私有的 var b = 2;})();

prototype

把它看成創建對象所依賴的模板。

這裡不得不說另一個東西__proto__,對象有屬性__proto__,指向該對象的構造函數的原型對象,function除了有屬性__proto__,還有屬性prototype,prototype指向該方法的原型對象。

具體說說prototype和__proto__的區別:

  • prototype 用來實現基於原型的繼承與屬性的共享
  • __proto__構成原型鏈,同樣用於實現基於原型的繼承。舉個例子,當我們訪問obj這個對象中的x屬性時,如果在obj中找不到,那麼就會沿著__proto__依次查找。

__proto__的指向?

  • 指向創建這個對象的函數的顯式原型。

prototype的指向?

  • 當前函數作為構造函數構造出來的對象原型對象

寫個demo來做下示例

function Person(name){ this.name = name;}Person.prototype.say = function(){ console.log(this.name);}var charles = new Person(charles);console.log(charles.__proto__ === Person.prototype);

推薦閱讀:

奇舞周刊第 257 期:我從小程序學到了什麼
Picasso:開啟大前端的未來
前端每周清單第63期:Polymer 3.0,iOS爆出新漏洞,2018前端工具調查結果
2.看完你就該會git了
通過QQ音樂介面獲取數據

TAG:ECMAScript | 前端開發 |