(JS)如何使用" new"运算符并返回"此"?

时间:2018-04-21 19:14:54

标签: javascript new-operator

我正在制作一个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运算符?

6 个答案:

答案 0 :(得分:3)

仅当返回值是对象时才返回返回值。如果返回基元(数字,布尔值,字符串,undefinednull),则返回构造的对象。

您可以可能返回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);