我正在从nodeschool做 browserify-adventure 教程。其中一个练习涉及创建一个简单的小部件,它将一个html字符串转换为DOM元素,在其中插入一个给定的名称,然后将其附加到文档中的选定目标。有效的解决方案如下:
var domify = require('domify');
var html = '<div>Hello <span class="name"></span>!</div>';
module.exports = Widget;
function Widget() {
if (!(this instanceof Widget)) return new Widget;
this.element = domify(html);
this.setName = function(str) {
this.element.querySelector("span.name").textContent=str;
}
this.appendTo = function(target) {
target.appendChild(this.element);
}
}
我理解这个脚本中的一切是如何工作的,除了一件事 - 有人可以告诉我为什么这个特定的行是小部件工作所必需的吗?
if (!(this instanceof Widget)) return new Widget;
没有它,在浏览器中我得到了
Uncaught TypeError: Cannot read property 'setName' of undefined
at Object.3.shoe (bundle.js:2397)
at s (bundle.js:1)
at e (bundle.js:1)
at bundle.js:1