大家好!
理解完物件继承的方法,就要接续介绍今天的 Getter 和 Setter 了。
我们进入今天的主题吧!
出现赋值和取值的行为,就是存取行为。
let a;
a; // undefined
a = 'Felix'; // 'Felix'
a; // 'Felix'
/* or */
window.a; // undefined
window.a = 'Felix'; // 'Felix'
window.a; // 'Felix'
可赋值的情况下,新的值会是赋予的值,这是完全没有争议的,就像上方的举例一样。
Getter 和 Setter 顾名思义就是有 Get 和 Set 的行为,因此称呼为「存取器」是最适合的了。
那麽存取器究竟如何使用呢?让我们来看看:
document.cookie; // ''
document.cookie = 'name=Felix; max-age=9'; // 'name=Felix; max-age=9'
document.cookie; // 'name=Felix'
document.cookie = 'name=Felix; max-age=0'; // 'name=Felix; max-age=0'
document.cookie; // ''
对 document.cookie
赋值後,读取的值会和赋予的值不同,这就是存取器的特色之一。
document.cookie
乍看之下就是物件属性,但是为什麽又和一般的物件属性不同呢?
原因是因为 document.cookie
被充当函式使用了。
定义存取器和定义属性只有稍微不同,就是要在存取器的名称前加上 get
或 set
:
let clicking = {
limit: 10,
targets: [],
get status() {
return this.targets;
},
set status(t) {
if (this.targets.length < this.limit) return this.targets.push(t);
throw new Error('You have reached the maximum set limit.');
}
};
上方的存取器有什麽用途呢?让我们来看看:
window.addEventListener('click', function (e) {
clicking.status = e.target;
console.log('Clicked!');
});
/* 点击网页第 10 次 */
// Log: Clicked!
clicking.status; // [...×10]
/* 点击网页第 11 次 */
// Uncaught Error: You have reached the maximum set limit.
clicking.status; // [...×10]
网页被点击的前 10 次都会将点击到的元素推入
clicking.targets
阵列,并记录Clicked!
於主控台。
但是,当点击次数超过 10 次时,就会跳出错误,并停止执行触发的函式,因此主控台不会有纪录。
有更能理解存取器的作用吗?
差不多也到尾声了,接下来我们要介绍的是物件的冻结、防止扩展和密封方式。
如果对文章有任何疑问,也欢迎在下方提问和建议!
我是 Felix,我们明天再见!
<<: Day13 - 物理模拟篇 - 弹跳球世界IV - 成为Canvas Ninja ~ 理解2D渲染的精髓
Scroll Animation 卡片滑动载入效果(原生JS版) CodePen: https://...
Vue的安装方式有很多种像我这次是使用CND的方式来使用Vue 首先呢我们可以先到Vue的网站 可以...
介绍 这是 Obsidian 使用教学 — 应用篇的第 4 篇文章。 在 上一篇文章 中我介绍了 B...
我们之前在喂历史资料,都是先用 shioaji 下载下来,然後再用 padas 转成 datafra...
DAY12 在 Azure Machine Learning 里 Label data(上) Azu...