主要问题是它box
不会创建 DOM 元素。您不能只是将任何对象附加到 DOM,它必须是某种类型的 DOM 节点(元素、文本节点等)。
如果您确实box
创建了一个 DOM 元素,那么您不会想直接在其上存储width
、height
和color
,而只是在其style
对象中。
由于您使用时创建的对象new
将被丢弃,因此我将使用它createBox
而不是new
与它一起使用:
function createBox(width, height, backgroundColor) {
const element = document.createElement("div");
element.style.width = width + "px";
element.style.height = height + "px";
element.style.backgroundColor = backgroundColor;
return element;
}
document.body.appendChild(
createBox(100, 100, "red")
);
如果您不想创建 DOM 元素,那么问题this.style.width=width
在于它试图分配给undefined
,因为this
没有style
属性,this.style
所以undefined
. 如果要从各种属性创建对象,可以使用对象字面量:
function Box(width, height, color) {
this.width = width;
this.height = height;
this.color = color;
this.style = {width, height, backgroundColor: color};
}
(请注意,我更改box
为Box
. JavaScript 中压倒性的约定是构造函数(您调用 vianew
或类似的函数)以大写字符开头。)
但是,如果您要创建一个 DOM 元素,那么它已经有了一个style
对象。
我应该注意,我已经使用了width
和height
那里的速记属性,这些属性是在 ES2015 中添加的,因此几乎得到了普遍支持,但不受 IE11 等过时的浏览器的支持。如果您需要支持它们,请改用长格式 ( width: width
)。
您还可以查看 ES2015 的class
语法,它允许您创建构造函数并以更简洁、不易出错的方式填充它们分配为实例原型的对象。如果您需要针对仅限 ES5 的浏览器,可以使用 Babel 等工具为您进行转换。