1. 程式人生 > >今天來說說什麼是: 面向物件

今天來說說什麼是: 面向物件

js 是一種基於物件的語言,和其他面嚮物件語言不同。
例如:Math等內建物件,window物件,document物件等等。

JavaScript的面向物件程式設計和大多數其他語言如Java、C#的面向物件程式設計都不太一樣。如果你熟悉Java或C#,很好,你一定明白麵向物件的兩個基本概念:
類:類是物件的型別模板,例如,定義Student類來表示學生,類本身是一種型別,Student表示學生型別,但不表示任何具體的某個學生;
例項:例項是根據類建立的物件,例如,根據Student類可以創建出xiaoming、xiaohong、xiaojun等多個例項,每個例項表示一個具體的學生,他們全都屬於Student型別。
所以,類和例項是大多數面向物件程式語言的基本概念。
不過,在JavaScript中,這個概念需要改一改。JavaScript不區分類和例項的概念,而是通過原型(prototype)來實現面向物件程式設計。

建立物件:
物件是帶有屬性和方法的特殊資料型別
屬性是與物件相關的值(變數),例如:
var message=”HELLO WORLD!”;
var x=message.length;
message是String 物件,length是物件的屬性

方法是能夠在物件上執行的動作(函式),例如:
var message=”HELLO WORLD!”;
var x=message.toLowerCase( ); // 方法只不過是附加在物件上的函式
message是String 物件,toLowerCase( )是物件的方法

JavaScript 自定義物件
建立新物件有多種不同的方法:
1. 直接給物件擴充屬性和方法 、物件字面量
2. 工廠方式
3. 建構函式方式
4. 原型(prototype)方式
5. 混合方式(建構函式和原型)
………

  1. 建構函式方式
    當任意一個普通函式用於建立一類物件時,它就被稱作 建構函式 或 構造器 (constructor),建構函式的作用就是初始化一個新建立的物件,並在使用物件前設定物件的屬性和方法。
    通常是利用無敵的this,在函式內部對 this 新增屬性和方法,因為this就表示當前執行時的物件,將建構函式this的作用域指向新物件,將當前執行物件的屬性和方法都賦給新物件,這樣的物件模式稱為建構函式模式

  2. 原型(prototype)方式
    Javascript規定,每一個建構函式都有一個prototype屬性,指向另一個物件。這個物件的所有屬性和方法,都會被建構函式的例項繼承。

prototype屬性,指向另一個物件。這個物件的所有屬性和方法,都會被建構函式的例項繼承。這意味著,我們可以把那些不變的屬性和方法,直接定義在prototype物件上
這時所有例項的屬性和方法,其實都是同一個記憶體地址,指向prototype物件,因此就提高了執行效率。

在 JavaScript 中, constructor 屬性返回物件的建構函式。
返回值是函式的引用,不是函式名:
JavaScript 陣列 constructor 屬性返回 function Array() { [native code] }
JavaScript 數字 constructor 屬性返回 function Number() { [native code] }
JavaScript 字串 constructor 屬性返回 function String() { [native code] }

prototype和proto的概念
prototype是函式的一個屬性(每個函式都有一個prototype屬性),這個屬性是一個指標,指向一個物件(原型物件)。
proto是一個物件擁有的內建屬性(請注意:prototype是函式的內建屬性,proto是物件的內建屬性),是JS內部用來尋找原型鏈的屬性。
用chrome和FF都可以訪問到原型(obj.proto)屬性,IE不可以。

call 方法/apply方法
呼叫一個物件的一個方法,以另一個物件替換當前物件。

語法:apply([thisObj,[arg1,arg2])
引數:thisObj 可選項。將被用作當前物件的物件。
arg1, arg2, , argN 可選項。將被傳遞方法引數序列。

語法:call([thisObj,arg1,arg2)
call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下文從初始的上下文改變為由 thisObj 指定的新物件。*

我在後臺看到很多都轉發了,小編在這裡謝謝大家了,希望文章對你和他(她)有幫助