Javascript:如何将getter添加到现有对象

时间:2016-06-14 09:38:40

标签: javascript

我可以像这样使用JavaScript对象

var member = {
    firstName:"XYZ", 
    lastName:"zzz", 
    get fullName(){ return (this.firstName + ' ' + this.lastName); }
}

我甚至可以像这样添加更多属性

member.isGuest = true;

但有没有办法可以将getter添加到已有的对象中?像这样的东西

member.isGuest = get isGuest(){ return this.firstName=='Guest'; }

5 个答案:

答案 0 :(得分:43)

尝试defineProperty

Object.defineProperty(member, 'isGuest', {
  get: function() { return this.firstName=='Guest' }
});

答案 1 :(得分:9)

您可以这样使用新的Object.defineProperty

Object.defineProperty(
    member, 
    'prop', 
    {
        get: function() { 
            return this.lastName.toUpperCase()
        }
    }
);

过去你必须使用__defineGetter__,但现在它已被弃用。

答案 2 :(得分:1)

此外,您可以添加自定义getter并保留旧值,如果它不应该从其他值计算,例如在您的示例中。为此,请使用如下的无限函数创建其他上下文层:

df = df.apply(pd.to_numeric, downcast='float')

答案 3 :(得分:1)

不仅可以使用上述解决方案,而且可以使用...运算符。

"[a-zA-Z]+ [a-zA-Z]+ [0-9][0-9]*

s = ptnt_txt.read() my_txt_pull = re.findall("[a-zA-Z]+\s+[a-zA-Z]+\s+[0-9][0-9]*", s, re.M) if my_txt_pull: for item in my_txt_pull: captured_text.append(item.replace('\n', ' ')) 是散布运算符,它“散布”它所使用的对象的内容,因此也就是名称。例如:

  • // Initialize x var x = { x: 5 } // Log x.x and x.y console.log(x.x, x.y /* undefined */) x = { ...x, // {...x} is the same as {x: x.x} // The getter get y() { return this.x } } // Log x.x and x.y console.log(x.x, x.y /* Not undefined */) // Set x.x to 1234 x.x = 1234 // Log x.x and x.y console.log(x.x, x.y)...
  • doSomething(...[1, 2, 3])doSomething(1, 2, 3)

答案 4 :(得分:-5)

你只能在类中使用get和set,这意味着getter和setter方法。但你可以在课堂上添加一个功能:

member.isGuest = function isGuest(){ return this.firstName=='Guest';}

member.isGuest()

获取意味着可以读取属性! 设置意味着可以写属性! 你可以在书中看到它“JavaScript:The.Definitive.Guide”6章第6章!