对于以下语法
a = {
get p() {
alert(1)
}
};
alert(a.p);
它提示我1
,而不是undefined
。
对于
a = {
set p(x) {
alert(x)
}
};
alert(a.p);
它提示我未定义。
我不完全理解这种行为, 什么
a = {
get p() {
alert(1)
}
}
and
a = {
set p(x) {
alert(x)
}
};
意思?
答案 0 :(得分:1)
因为p()
方法没有返回任何内容因此返回undefined
如果你这样做
a={get p(){alert(1); return 2;}};
alert(a.p);
它将提醒1
然后2
,因为此p()
方法已返回2
答案 1 :(得分:1)
[编辑] - 您更改了原始问题,因此此答案并未涵盖所有内容。
p
是getter函数 - 只要您访问p
属性,就会调用它。在getter
alert(1)
getter
。
p
函数不返回任何内容。因此,undefined
是alert(a.p)
。因此undefined
提醒a.p
。
因此,您的计划确实:
alert(a.p)
的价值:p
alert(1)
getter函数。哪个有p
alert(a.p)
getter函数不返回任何内容undefined
提醒{get p(){alert(1)}}
答案 2 :(得分:1)
p
这是一个getter a.p
当您使用alert(a.p);
时,它将使用该getter来检索某些值
所以当你执行1
时,它首先会调用getter,因此请提醒undefined
,然后提醒返回的值WITH DataSource ([AccountId], [Type], [Amount]) AS
(
SELECT [AccountId]
,'intractamt'
,Sum(amt)
FROM tbl_LEDGER
WHERE [GlCode] = 'INTRAC'
GROUP BY AccountId
UNION ALL
SELECT AccountId
,'intlasAmt'
,Sum(amt)
FROM tbl_LEDGER
WHERE [GlCode] = 'INTLAS'
GROUP BY [AccountId]
)
SELECT [AccountId]
,[intractamt]
,[intlasAmt]
FROM DataSource
PIVOT
(
MAX([Amount]) FOR [Type] IN ([intractamt], [intlasAmt])
) PVT
。
答案 3 :(得分:1)
有两种类型的对象属性:data
属性和accessor
属性。
访问者属性由getters
和setters
访问。
您的对象a
旨在作为具有名为p
的访问者属性的对象。
通常,这些对象以下列方式声明:
a = {
_p: 'my value', // intended as private
get p() {
return this._p;
},
set p(x) {
this._p = x;
}
};
console.log(a.p); // gives 'my value'
a.p = 'new value';
console.log(a.p); // gives 'new value'
另一种方法是使用Object.defineProperty()
方法,它允许您设置所有需要的属性属性。像这样:
var a = {p: 'my value'};
Object.defineProperty(a, 'p', {
get: function() { return this.p; },
set: function(newValue) { this.p = newValue; },
enumerable: true,
configurable: true
});