我通过文字创建了一个对象,并使用'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;
但那也行不通。我尝试使用函数语句创建对象,并且工作正常,但我想这样做。帮助
答案 0 :(得分:1)
你可能意味着
var r = Object.create(rectangle);
<强>附录强>
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);
问题中代码的问题是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)
rectangle
是Object 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
的参数必须是一个函数。