object literals实例化不起作用

时间:2012-03-10 08:53:23

标签: javascript javascript-objects

我通过文字创建了一个对象,并使用'new'运算符进行实例化。但那不起作用。这是我的代码:

var rectangle = { 
    upperLeft : { x : 2, y : 2 },
    lowerRight : { x : 4, y : 4}
}
var r=new rectangle;
alert(r.upperLeft.x) // will yield 2

我在实例化时尝试在对象名后面使用圆括号:

var r=new rectangle;

但那也行不通。我尝试使用函数语句创建对象,并且工作正常,但我想这样做。帮助

4 个答案:

答案 0 :(得分:1)

你可能意味着

var r = Object.create(rectangle);

这是:http://jsfiddle.net/Cra8Q/

<强>附录

JavaScript中用于创建一堆矩形的“旧”方法是使用new运算符。这样做的方法是这样的:

function Rectangle(x1, y1, x2, y2) {
    this.upperLeft = {x: x1, y: y1};
    this.lowerRight = {x: x2, y: y2};
}

var r = new Rectangle(2, 2, 4, 4);

alert(r.upperLeft.x);

请参阅http://jsfiddle.net/uDs3N/

问题中代码的问题是rectangle是一个实际的矩形对象,而不是构造函数,所以它不能与new一起使用。运算符new只能在函数调用之前使用。

也就是说,更现代的方法是创建原型矩形对象,并使用Object.create派生新的矩形。但是,构造函数方法仍然很受欢迎。

答案 1 :(得分:0)

使用“new”运算符创建对象的另一种方法是定义构造函数,如下所示:

var Rectangle = function()
{
    this.upperLeft = { x : 2, y : 2 },
    this.lowerRight = { x : 4, y : 4}
}

var rect = new Rectangle();
alert(rect.upperLeft.x);

答案 2 :(得分:0)

正如您所注意到的,{p> rectangleObject Literal。它不是构造函数,它是Object的单个实例。如果您希望rectangle拥有更多实例,请使用以下内容:

function Rectangle(ul,lr){
  var default = {x:0,y:0};
  return {
          upperLeft: ul || default, 
          lowerRight: lr || default 
         };
}

var r1 = new Rectangle({x:2,y:2},{x:4,y:4}),
    r2 = new Rectangle({x:3,y:3},{x:5,y:5}),
    r3 = new Rectangle;

r1.upperleft.x; //=> 2
r2.upperleft.x; //=> 3
r3.upperLeft.x = 5;
r3.upperLeft.y = 7;
alert(r3.upperLeft.x; //=> 5

答案 3 :(得分:0)

new运算符采用函数,而不是对象。你正在尝试的东西是行不通的。

这就是new的工作原理:

function Rectangle() {
    this.upperLeft = {x: 2, y: 2};
    this.lowerRight = {x: 4, y: 4};
}

var r = new Rectangle();

var r = new Rectangle()的部分操作与此类似:

var r = {};
Rectangle.call(r); // makes r available as `this` in the function

远不等同于new ;它遗漏了各种原型魔法和其他东西。

但它显示了为什么new的参数必须是一个函数。