2016-01-21 61 views
1

我创建getter和setter函数,像这样:为什么我们需要在创建对象时额外添加'get'和'set'?

var obj = { 
    a: 7, 
    get b() { 
     return 1; 
    }, 
    set c(a) { 
     this.a = 2; 
    } 
} 

我再尝试调用函数b和c。 如果我打电话obj.c(),出现以下错误:

Uncaught TypeError: obj.c is not a function(…)

同为obj.b()

创建对象时,'get'和'set'是做什么的?

+1

你有什么是getter和setter函数等等只是访问'alert(o1.b)'将会调用'b()'函数 –

+0

同样的方法设置'o1.c = 4'将调用setter函数 –

+0

'b'和'c'不是函数 – Hacketo

回答

2

getset关键字是创建吸气二传手功能。您不明确地称它们为—但是当您对属性(setter)进行赋值或检索属性(getter)的值时,它们隐式称为

,当你做这样的事情

var x = o1.b; 

setter方法会当你做

o1.c = 12; 

请注意,你不“要”使用setter和getter被称为吸气将被称为功能;它们是可选的,并且它们是ES2015的一项功能。旧的JavaScript环境不支持该机制。

0

因为getter和setter的全部重点都是为了不让它们作为函数使用,而是在你使用get/set属性的时候在后台运行一个函数。

例如,这使得它,这样obj1.b读取时会无论你将其设置为加100,使用obj1.a来存储值:

var o1 = { 
    a:7, 
    get b(){return this.a;}, 
    set b(val){this.a=val+100;} 
} 

alert(o1.b); // 7 cuz nothing changed yet 
o1.b = 10; 
alert(o1.b); // now 110 
相关问题