JavaScript ¶ÔÏó·ÃÎÊÆ÷

JavaScript ·ÃÎÊÆ÷£¨Getter ºÍ Setter£©

ECMAScript 5 (2009) ÒýÈëÁË Getter ºÍ Setter¡£

Getter ºÍ Setter ÔÊÐíÄú¶¨Òå¶ÔÏó·ÃÎÊÆ÷£¨±»¼ÆËãµÄÊôÐÔ£©¡£

JavaScript Getter£¨get ¹Ø¼ü´Ê£©

±¾ÀýʹÓà lang ÊôÐÔÀ´»ñÈ¡ language ÊôÐÔµÄÖµ¡£

ʵÀý

// ´´½¨¶ÔÏó£º
var person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "en",
  get lang() {
    return this.language;
  }
};

// ʹÓà getter À´ÏÔʾÀ´×Ô¶ÔÏóµÄÊý¾Ý£º
document.getElementById("demo").innerHTML = person.lang;

Ç××ÔÊÔÒ»ÊÔ

JavaScript Setter£¨set ¹Ø¼ü´Ê£©

±¾ÀýʹÓà lang ÊôÐÔÀ´ÉèÖà language ÊôÐÔµÄÖµ¡£

ʵÀý

var person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "",
  set lang(lang) {
    this.language = lang;
  }
};

// ʹÓà setter À´ÉèÖöÔÏóÊôÐÔ£º
person.lang = "en";

// ÏÔʾÀ´×Ô¶ÔÏóµÄÊý¾Ý£º
document.getElementById("demo").innerHTML = person.language;

Ç××ÔÊÔÒ»ÊÔ

JavaScript º¯Êý»¹ÊÇ Getter£¿

ÏÂÃæÁ½¸öÀý×ÓµÄÇø±ðÔÚÄÄÀ

Àý×Ó 1

var person = {
  firstName: "Bill",
  lastName : "Gates",
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};

// ʹÓ÷½·¨À´ÏÔʾÀ´×Ô¶ÔÏóµÄÊý¾Ý£º
document.getElementById("demo").innerHTML = person.fullName();

Ç××ÔÊÔÒ»ÊÔ

Àý×Ó 2

var person = {
  firstName: "Bill",
  lastName : "Gates",
  get fullName() {
    return this.firstName + " " + this.lastName;
  }
};

// ʹÓà getter À´ÏÔʾÀ´×Ô¶ÔÏóµÄÊý¾Ý£º
document.getElementById("demo").innerHTML = person.fullName;

Ç××ÔÊÔÒ»ÊÔ

Àý×Ó 1 ÒÔº¯ÊýÐÎʽ·ÃÎÊ fullName£ºperson.fullName()¡£

Àý×Ó 2 ÒÔÊôÐÔÐÎʽ·ÃÎÊ fullName£ºperson.fullName¡£

µÚ¶þ¸öÀý×ÓÌṩÁ˸ü¼ò½àµÄÓï·¨¡£

Êý¾ÝÖÊÁ¿

ʹÓà getter ºÍ setter ʱ£¬JavaScript ¿ÉÒÔÈ·±£¸üºÃµÄÊý¾ÝÖÊÁ¿¡£

ÔÚ±¾ÀýÖУ¬Ê¹Óà lang ÊôÐÔÒÔ´óдÐÎʽ·µ»Ø language ÊôÐÔµÄÖµ£º

ʵÀý

// Create an object:
var person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "en",
  get lang() {
    return this.language.toUpperCase();
  }
};

// ʹÓà getter À´ÏÔʾÀ´×Ô¶ÔÏóµÄÊý¾Ý£º
document.getElementById("demo").innerHTML = person.lang;

Ç××ÔÊÔÒ»ÊÔ

ÔÚ±¾ÀýÖУ¬Ê¹Óà lang ÊôÐÔ½«´óдֵ´æ´¢ÔÚ language ÊôÐÔÖУº

ʵÀý

var person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "",
  set lang(lang) {
    this.language = lang.toUpperCase();
  }
};

// ʹÓà getter À´ÉèÖöÔÏóÊôÐÔ£º
person.lang = "en";

// ÏÔʾÀ´×Ô¶ÔÏóµÄÊý¾Ý£º
document.getElementById("demo").innerHTML = person.language;

Ç××ÔÊÔÒ»ÊÔ

ΪʲôʹÓà Getter ºÍ Setter£¿

  • ËüÌṩÁ˸ü¼ò½àµÄÓï·¨
  • ËüÔÊÐíÊôÐԺͷ½·¨µÄÓï·¨Ïàͬ
  • Ëü¿ÉÒÔÈ·±£¸üºÃµÄÊý¾ÝÖÊÁ¿
  • ÓÐÀûÓÚºǫ́¹¤×÷

Ò»¸ö¼ÆÊýÆ÷ʵÀý

ʵÀý

var obj = {
  counter : 0,
  get reset() {
    this.counter = 0;
  },
  get increment() {
    this.counter++;
  },
  get decrement() {
    this.counter--;
  },
  set add(value) {
    this.counter += value;
  },
  set subtract(value) {
    this.counter -= value;
  }
};

// ²Ù×÷¼ÆÊýÆ÷£º
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
Object.defineProperty()

Ç××ÔÊÔÒ»ÊÔ

Object.defineProperty() ·½·¨Ò²¿ÉÓÃÓÚÌí¼Ó Getter ºÍ Setter£º

ʵÀý

// ¶¨Òå¶ÔÏó
var obj = {counter : 0};

// ¶¨Òå setters
Object.defineProperty(obj, "reset", {
  get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
  get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
  get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
  set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
  set : function (value) {this.counter -= value;}
});

// ²Ù×÷¼ÆÊýÆ÷£º
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;

Ç××ÔÊÔÒ»ÊÔ

ä¯ÀÀÆ÷Ö§³Ö

Internet Explorer 8 »ò¸üÔçµÄ°æ±¾²»Ö§³Ö Getter ºÍ Setter£º

Yes 9.0 Yes Yes Yes
VUE