3 回答
TA贡献1854条经验 获得超8个赞
const { r, g, b } = this;此行this引用创建的对象实例,如果删除此行,它将起作用,因为函数方法中的参数名称与构造的对象的属性名称匹配。这就是代码“有效”的原因。
function makeColor(r, g, b) {
const color = {};
color.r = r;
color.g = g;
color.b = b;
color.rgb = function () {
//const { r, g, b } = this;
return `rgb(${r}, ${g}, ${b})`;
};
return color;
}
const newColor = makeColor(50, 100, 150);
newColor.rgb();
console.log(newColor); // {r: 50, g: 100, b: 150, rgb: ƒ}
newColor.b = 0;
console.log(newColor.rgb()); // this still prints 150 where it should print 0
// cause b refers to the argument passed into the makeColor function not instance member
function makeColor2(r, g, b) {
const color = {};
color.r = r;
color.g = g;
color.b = b;
color.rgb = function () {
const { r, g, b } = this;
return `rgb(${r}, ${g}, ${b})`;
};
return color;
}
const newColor2 = makeColor2(50, 100, 150);
newColor2.b = 0;
console.log(newColor2.rgb()); // b is 0 as expected
对于第二个问题,工厂方法是构建一些东西,然后通过从函数返回它来生产该东西。如果您不归还它,它将保持本地状态并且根本没有用处。
TA贡献1906条经验 获得超3个赞
当您删除时const { r, g, b } = this;
,将引用您分配给的rgb(${r}, ${g}, ${b})
参数。makeColor
color
当您调用 时makeColor
,它会执行函数中的任何操作,然后返回一个值。在您的情况下,该值是color
中定义的对象makeColor
。如果去掉return就会返回undefined
TA贡献1752条经验 获得超4个赞
即使我删除“This”,代码仍然有效
我想你的意思是,这条线注释掉后它仍然有效
//const { r, g, b } = this;
原因是您本质上对变量r、 、进行了闭包g,b因此您仍然可以读取它们。
我也不明白为什么要删除“返回颜色;” 破坏“color.rgb()”。
删除返回行会破坏一切,因为现在您的makeColor函数返回未定义:
function makeColor(r, g, b) {
const color = {};
color.r = r;
color.g = g;
color.b = b;
color.rgb = function () {
//const { r, g, b } = this;
return `rgb(${r}, ${g}, ${b})`;
};
//return color;
}
const newColor = makeColor(50, 100, 150);
//newColor.rgb();
console.log(newColor); // undefined
//console.log(newColor.rgb()); //rgb(50, 100, 150)
该行返回具有属性、和函数return color
的对象r
g
b
rgb()
添加回答
举报