我正在制作一个JavaScript游戏框架。我有一个名为Color3
的函数。我正在尝试使用new
运算符来使用该函数。但是,每次它返回对象而不是我想要返回的字符串。这是代码:
Color3 = function(r, g, b) {
this.r = 255;
this.g = 255;
this.b = 255;
if (r != null)
this.r = r;
if (g != null)
this.g = g;
if (b != null)
this.b = b;
return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")";
};
var myColor = new Color3(0, 255, 0);
console.log(myColor);
预期产出:
"rgb(0, 255, 0)"
实际输出:
Color3 {r: 0, g: 255, b: 0}
有没有办法可以获得预期的输出?或者我是否必须不使用new
运算符?
答案 0 :(得分:3)
仅当返回值是对象时才返回返回值。如果返回基元(数字,布尔值,字符串,undefined
,null
),则返回构造的对象。
您可以可能返回String
个对象:
return new String("rgb(" + this.r + ", " + this.g + ", " + this.b + ")");
这将可能工作,尽管字符串基元和字符串对象之间存在一些差异。
更重要的问题是“为什么想要这样做?”看起来你根本不想构建一个对象(你丢弃了你构造的对象):一个普通的旧函数可以正常工作。
答案 1 :(得分:2)
如果您返回的内容不是对象,则返回默认对象。您应该返回一个对象来更改返回值。尝试返回new String("rgb(" + this.r + ", " + this.g + ", " + this.b + ")")
答案 2 :(得分:1)
“有没有办法可以获得预期的输出?或者我是否必须不使用新的运算符?”
是的,您可以构建这样的对象并仍然获得预期的输出。您可以通过向构造函数的.toString()
添加.prototype
方法来完成此操作。
Color3 = function(r, g, b) {
if (r != null)
this.r = r;
if (g != null)
this.g = g;
if (b != null)
this.b = b;
};
Color3.prototype.r = 255;
Color3.prototype.g = 255;
Color3.prototype.b = 255;
Color3.prototype.toString = function() {
return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")";
}
var c = new Color3(123, 234, 345);
console.log(`Color is: ${c}`);
我还在原型中添加了默认的RGB值。
答案 3 :(得分:0)
Javascript构造函数的new
方法创建了一个" new"构造函数指定的Object的实例。你需要做这样的事情:
Color3 = function(r, g, b) {
this.r = 255;
this.g = 255;
this.b = 255;
if (r != null)
this.r = r;
if (g!= null)
this.g = g;
if (b != null)
this.b = b;
this.getColor = function(){
return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")";
}
};
var someColor = Color3.new(200,200,200);
someColor.getColor();
答案 4 :(得分:0)
如果你想返回Color3返回的字符串,你应该调用Color3函数,而没有' new'操作者:
Color3 = function(r, g, b) {
this.r = 255;
this.g = 255;
this.b = 255;
if (r != null)
this.r = r;
if (g != null)
this.g = g;
if (b != null)
this.b = b;
return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")";
};
var color = Color3(8,22,3);
//testing the Color3 function
console.log(typeof(color));
console.log(color);

答案 5 :(得分:0)
这就是你追求的吗?
Color3 = function(r, g, b) {
this.r = 255;
this.g = 255;
this.b = 255;
this.rgb;
if (r != null)
this.r = r;
if (g != null)
this.g = g;
if (b != null)
this.b = b;
this.rgb = this.r + ", " + this.g + ", " + this.b ;
};
var myColor = new Color3(0, 255, 0);
console.log(myColor.rgb);