什么是__defineGetter __()和__defineSetter __()函数?

时间:2011-07-26 04:16:58

标签: javascript

每个__defineGetter__()原型中的__defineSetter__()Object函数是什么?

3 个答案:

答案 0 :(得分:12)

有关说明和示例代码,请参阅MDN docs here

  

getter是一种获取特定属性值的方法。 setter是一种设置特定属性值的方法。您可以在任何预定义的核心对象或支持添加新属性的用户定义对象上定义getter和setter。

如文档中所述(以及@ cwallenpoole),__define[GS]etter__()函数现已弃用。 this article中有更多细节。我相信defineProperty()函数现在是首选语法。

答案 1 :(得分:8)

回答您的问题__defineGetter__()__defineSetter__()是为对象的属性创建getter和setter的旧/原始方法。它们允许您使用对象的属性作为名称/值对,而在幕后这些名称/值对由函数支持。

例如,假设您想引用固定范围内的一些随机数。你可以将这些表达为具有最大范围的单词,它看起来像一个属性。

var random = {};
random.__defineGetter__('ten', function() { 
    return Math.floor(Math.random()*10); });
random.__defineGetter__('hundred', function() { 
    return Math.floor(Math.random()*100); });

请注意,上述示例回答问题时,您不应使用此解决方案。相反,你应该使用现代形式的getter和setter,因为ES5:

var random = {
    get ten() { return Math.floor(Math.random()*10); },
    get hundred() { return Math.floor(Math.random()*100); }
};

上述任何一种结构都允许你得到一个这样的随机数:

var myrand = random.ten;
// returns a result in the range 0 to 9

答案 2 :(得分:0)

.__defineGetter__表示您引用对象。[param1]执行的函数。 .__defineSetter__表示设置对象。[param1]执行的功能。 例如,像这样:

const person = {
  firstName: 'john',
  lastName: 'doe',
};

person.__defineGetter__('fullName', () => `${person.firstName} ${person.lastName}`);
person.__defineSetter__('fullName', v => {
  person.firstName = v.split(' ')[0];
  person.lastName = v.split(' ')[1];
});

或者如果您想cls清除控制台,

this.__defineGetter__('cls', console.clear);