方法是與對(duì)象,或者說(shuō)相關(guān)聯(lián)的函數(shù),一種方法是一個(gè)對(duì)象,它是函數(shù)的一個(gè)屬性。
方法的定義方式與常規(guī)函數(shù)的定義方式相同,不同之處在于必須將它們分配為對(duì)象的屬性。
為了檢索對(duì)象方法,您將以與調(diào)用常規(guī)函數(shù)相同的方式對(duì)其進(jìn)行調(diào)用,只是將其附加到對(duì)象變量上。
// 創(chuàng)建對(duì)象 var user = { firstName: "Seagull", lastName : "an", age : 22, location : "New Delhi", getName : function() { return this.firstName + " " + this.lastName; } }; //訪問getName()方法 user.getName();測(cè)試看看?/?
如果訪問不帶()括號(hào)的方法,它將返回函數(shù)定義:
user.getName;測(cè)試看看?/?
JavaScript有一個(gè)特殊的關(guān)鍵字this,您可以在方法中使用它來(lái)引用當(dāng)前對(duì)象。
您可能已經(jīng)注意到我們的方法有些奇怪。以這個(gè)為例:
getName: function() { return this.firstName + " " + this.lastName; }
this關(guān)鍵字是指代碼被寫入內(nèi)部當(dāng)前對(duì)象-所以在這種情況下,this等同于user。
換句話說(shuō),this.firstName表示此對(duì)象的firstName屬性。
您可以在JS關(guān)鍵字教程JS中了解有關(guān)該this關(guān)鍵字的更多信息。
為了向?qū)ο筇砑有路椒?,您可以使用賦值運(yùn)算符(=)將新函數(shù)分配給屬性。
本示例向用戶對(duì)象添加“ greet”方法:
user.greet = function() { return "Hello World"; };測(cè)試看看?/?
ECMAScript 5(2009)引入了Getters和Setters。
getter是一種獲取特定屬性值的方法。
setter是一種設(shè)置特定屬性值的方法。
您可以在支持添加新屬性的任何預(yù)定義核心對(duì)象或用戶定義對(duì)象上定義getter和setter。
本示例使用get loc屬性作為location屬性的值:
//創(chuàng)建一個(gè)對(duì)象 var user = { firstName: "Seagull", lastName : "Anna", age : 22, location : "New Delhi", get loc() { return this.location; } }; //顯示來(lái)自對(duì)象的數(shù)據(jù) document.getElementById("para").innerHTML = user.loc;測(cè)試看看?/?
本示例使用set loc屬性作為location屬性的值:
// 創(chuàng)建對(duì)象 var user = { firstName: "Seagull", lastName : "Anna", age : 22, location : "New Delhi", set loc(x) { this.location = x; } }; // 使用setter設(shè)置對(duì)象屬性 user.loc = "Goa"; // 顯示來(lái)自對(duì)象的數(shù)據(jù) document.getElementById("para").innerHTML = user.location;測(cè)試看看?/?
以下兩個(gè)示例顯示了function 和 getter之間的區(qū)別:
//創(chuàng)建對(duì)象 var user = { firstName: "Seagull", lastName : "Anna", age : 22, location : "New Delhi", fullName : function() { return this.firstName + " " + this.lastName; } }; // 顯示來(lái)自對(duì)象的數(shù)據(jù) document.getElementById("para").innerHTML = user.fullName();測(cè)試看看?/?
// 創(chuàng)建對(duì)象 var user = { firstName: "Seagull", lastName : "Anna", age : 22, location : "New Delhi", get fullName() { return this.firstName + " " + this.lastName; } }; //顯示來(lái)自對(duì)象的數(shù)據(jù) document.getElementById("para").innerHTML = user.fullName;測(cè)試看看?/?
示例1 將fullName作為函數(shù)訪問:user.fullName()。
示例2 將fullName作為屬性訪問:user.fullName。
使用Getters 和 Setters:
它提供了更簡(jiǎn)單的語(yǔ)法
它允許屬性和方法的語(yǔ)法相同
它可以確保更好的數(shù)據(jù)質(zhì)量
對(duì)于后端處理很有用
Object.defineProperty()方法還可以用于添加Getter和Setter。
Object.defineProperty(object, property, {value : value})
讓我們以“計(jì)數(shù)器”對(duì)象為例:
var counter = {i : 0}; Object.defineProperty(counter, "increment", { get: function() {this.i++;}, }); Object.defineProperty(counter, "decrement", { get: function() {this.i--;}, }); Object.defineProperty(counter, "reset", { get: function() {this.i = 0;}, }); Object.defineProperty(counter, "add", { set: function (value) {this.i += value;} }); Object.defineProperty(counter, "subtract", { set: function (value) {this.i -= value;} }); counter.reset; counter.add = 25; counter.increment;測(cè)試看看?/?