【发布时间】:2018-06-05 17:50:56
【问题描述】:
我尝试通过传播 operator 语法在 JS 对象中创建一个 getter 混合,但它似乎总是返回 null。
HTML:
<body>
<div id="wrapperA"></div>
<div id="wrapperB"></div>
</body>
<script src='./test.js'></script>
JS:
"use strict";
const mixin = {
get wrapper() { return document.getElementById(this.wrappername); }
}
const wrapperA = {
wrappername: 'wrapperA',
...mixin
}
const wrapperB = {
wrappername: 'wrapperB',
...mixin
}
console.log(wrapperA);
console.log(wrapperB);
控制台输出:
{wrappername: "wrapperA", wrapper: null}
{wrappername: "wrapperB", wrapper: null}
This 链接到一个应该可以工作的扩展函数,据我所知,上面的代码创建了一个无意的闭包。但是,与... 语法相比,它的阅读效果很差。有谁知道如何让代码与后一种解决方案一起使用? ES 开发者知道这个问题吗?会在 ES7 中修复吗?
【问题讨论】:
-
为什么不简单:
class Wrapper { constructor(wrapperId) { this.id = wrapperId; } get wrapper() { return document.getElementById(this.id); }}? -
1.我倾向于完全避免类,这就是我在特定情况下没有使用它们的原因。
-
2. (这是1.)多重继承的原因。我也有可能使用原型链,但出于多种原因,我在很大程度上更喜欢 mixins。
-
结束 body 标记之后的脚本元素是无效的 HTML,因此不应执行该脚本。但是,浏览器可能会更正无效的 HTML 并将脚本放在结束标记之前。
-
"ES7" 是 ECMAScript 2016,它已经被当前版本 ECMAScript 2017 (ed 8) 取代。对象初始化器中的扩展属性可能位于ECMAScript 2018(第 9 版)中。 ;-)
标签: javascript mixins getter-setter ecmascript-next