我正在学习JS中的作文概念。下面是我的演示代码。
moveby
函数将值正确分配给x
和y
。
但是,setFillColor
函数不将传递的值赋给FillColor
。
调用setfillcolor
函数时到底发生了什么?
null
js lang-js prettyprint-override">const withMoveBy = (shape) => ({
moveBy: (diffX, diffY) => {
shape.dimensions.x += diffX;
shape.dimensions.y += diffY;
},
});
const withSetFillColor = (shape) => ({
setFillColor: (color) => {
console.log(shape.fillColor); // 1
shape.fillColor = color;
shape.dimensions.fillColor = color;
console.log(shape.fillColor); // 2
},
});
const shapeRectangle = (dimensions) => ({
type: 'rectangle',
fillColor: 'white',
dimensions,
});
const shapeCircle = (dimensions) => ({
type: 'circle',
fillColor: 'white',
dimensions,
});
const createShape = (type, dimensions) => {
let shape = null;
switch (type) {
case 'rectangle': {
shape = shapeRectangle(dimensions);
break;
}
case 'circle': {
shape = shapeCircle(dimensions);
break;
}
}
if (shape) {
shape = {
...shape,
...withSetFillColor(shape),
...withMoveBy(shape),
};
}
return shape;
};
let r = createShape('rectangle', {
x: 1,
y: 1,
width: 10,
height: 10,
});
let c = createShape('circle', { x: 10, y: 10, diameter: 10 });
r.moveBy(2, 3);
c.moveBy(1, 2);
r.setFillColor('red');
c.setFillColor('blue');
console.log(r);
console.log(c);
null
输出:
对于矩形和圆形,标记为//1
的行打印白色
。
标记为//2
的行打印矩形的红色
和圆形的蓝色
。
最终输出为:
{
"type": "rectangle",
"fillColor": "white",
"dimensions": {
"x": 3,
"y": 4,
"width": 10,
"height": 10,
"fillColor": "red"
}
}
{
"type": "circle",
"fillColor": "white",
"dimensions": {
"x": 11,
"y": 12,
"diameter": 10,
"fillColor": "blue"
}
}
作为对象属性的FillColor
仍然是White
。但是,dimensions
中的值是正确的。
问题源于createshape
-me的注释中的分配:
// creating the "new object"
shape = {
...shape, // shallow copying of the "old object"
...withSetFillColor(shape),
...withMoveBy(shape),
};
在这里,您创建了一个新对象,该对象由以下内容组成:
...Shape
的属性(类型、填充颜色、作为对象的维度)SetFillColor
,绑定到Shape
(旧对象)moveby
,绑定到shape
(旧对象)执行此语句后,您创建了两个形状:
在从旧对象复制的属性中,只有dimensions是一个非原语值,因此它在实例之间共享。
然后,当你打电话:
r.moveBy(2, 3);
它更改了oldshape.dimensions
,但它与newshape.dimensions
是同一个对象,因此在输出中可见。
然而,这一呼吁:
r.setFillColor('red');
修改OldShape
的FillColor
属性,您没有看到该属性。它还写入oldshape.dimensions.fillcolor
,该文件同样在对象之间共享,因此更改在两个对象中都可见。
我有一个集合,我想比较它是否包含所有的值。 这就是我想要的 我相信一定有其他方法来检查,而不是重复。
问题内容: 我们有Null合并运算符,可以按以下方式使用 我们可以在React JS中做同样的事情吗? 我发现我们可以使用&&运算符 在 address.ts 文件中 我需要像.net功能那样在带有React JS的打字稿中是可能的吗? 就像是: 问题答案: 这是传说中的第16期在TypeScript中建议的功能 在此功能的ECMAScript规范确定之前,不会将其引入TypeScript中,因为
本文向大家介绍常用的js方法合集,包括了常用的js方法合集的使用技巧和注意事项,需要的朋友参考一下 数组及对象深拷贝 获取地址栏参数 修改微信title 兼容ios 移动端响应式样式 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!
我添加了respone头(“cross-origin-opener-policy”,“same-origin”)来使用SharedArrayBuffer(以支持webassembly)。但是现在我在我的页面中添加第三方JS时遇到了麻烦,这将被跨源隔离阻止。有什么方法可以在webassembly中使用第三方JS吗?
本文向大家介绍js模仿java的Map集合详解,包括了js模仿java的Map集合详解的使用技巧和注意事项,需要的朋友参考一下 java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的
本文向大家介绍JS打印组合功能,包括了JS打印组合功能的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了JS打印组合功能,功能全面,供大家参考,具体内容如下 1.局部打印--即想打印什么地方就打印什么地方 解决办法: 将不想打印的地方隐藏起来 <style type="text/css" media=print> .noprint{display : none } 分页的时候用