📜  JavaScript Object.prototype.__defineSetter__() 方法

📅  最后修改于: 2022-05-13 01:56:55.577000             🧑  作者: Mango

JavaScript Object.prototype.__defineSetter__() 方法

__defineSetter__() 方法用于将对象的属性绑定到一个函数,当尝试设置指定的属性时将调用该函数。建议使用对象初始化器语法Object.defineProperty() API而不是此方法,因为它已被弃用。

句法:

obj.__defineSetter__( prop, fun )

参数:此函数接受上面给出的两个参数,如下所述:

  • prop:它是一个字符串,其中包含要绑定到给定函数的属性的名称。
  • fun:当尝试设置指定属性时调用的函数。函数的val参数可用于为保存试图分配给prop的值的变量指定别名。

返回值:此方法返回未定义。

以下示例说明了 __defineSetter__() 方法的用法:

示例 1:使用 __defineSetter__() 方法

Javascript
let tmpObj = {};
tmpObj.__defineSetter__('setValue', function(val) {
    this.currentValue = val;
});
 
obj.setValue = 10;
console.log(tmpObj.setValue);
console.log(tmpObj.currentValue);


Javascript
// Using the set operator
var obj1 = {
    set setValue(val) { this.currentValue = val; }
};
 
obj1.setValue = 10;
console.log(obj1.setValue);
console.log(obj1.currentValue);
 
// Using Object.defineProperty
var obj2 = {};
Object.defineProperty(obj2, 'value', {
  set: function(val) {
    this.currentValue = val;
  }
});
obj2.value = 2;
console.log(obj2.value);
console.log(obj2.currentValue);



输出:

undefined
10

示例 2:使用对象初始值设定项语法和 Object.defineProperty() API 的标准兼容方式

Javascript

// Using the set operator
var obj1 = {
    set setValue(val) { this.currentValue = val; }
};
 
obj1.setValue = 10;
console.log(obj1.setValue);
console.log(obj1.currentValue);
 
// Using Object.defineProperty
var obj2 = {};
Object.defineProperty(obj2, 'value', {
  set: function(val) {
    this.currentValue = val;
  }
});
obj2.value = 2;
console.log(obj2.value);
console.log(obj2.currentValue);

输出:

undefined
10
undefined
2