我只是通过 Codeacademy 工作,他们表明你必须同时编写两者。但他们没有解释为什么你需要两者。
user1469270
问问题
3988 次
2 回答
6
构造函数赋予对象一种身份感。它本质上是如何创建可重复使用的蓝图。它与经典 OOP 中的类非常相似并且经常混淆。
如果你经常有一堆“汽车”对象,并且有一些方法或属性通常与所有汽车一起使用,你可以创建一个 Car 构造函数来帮助封装它。
function Car(numPassengers) {
this.numPassengers = numPassengers;
}
Car.prototype = {
accelerate: function () {
// blah
},
brake: function () {
// blah
}
};
var jetta = new Car(4);
var bmwZ4 = new Car(2);
对象字面量是一种传递即时对象的方法,该对象的结构和创建不需要重用。与经典的 OOP 相比,类似于 Java 中的 Map(除了 javascript 对象文字仍然可以有方法)。一个常见的用例是一个函数,它接受一堆可能的参数,但每个参数都是可选的。
function someActionThatTakesOptionalParams(options) {
if (options.doAlert) {
alert(options.doAlert);
}
if (options.someOtherProperty) {
// do some work
}
}
someActionThatTakesOptionalParams({
doAlert: 'this will show up in an alert box',
someOtherProperty: 5,
hello: 'world'
});
这也是一种方便的方法,可以对传递给其他没有附加方法的数据进行建模。例如,您有一个采用 JSON 的 API:
$.ajax({
url: 'someApiEndpoint',
method: 'get',
params: {
x: 5,
y: 10
}
});
于 2013-06-01T22:03:41.487 回答
0
不是一个愚蠢的问题。实际上,Object 构造函数,尤其是 Array 构造函数可能很棘手,因为它们采用具有不同语义的不同参数,这可能会使您产生细微的错误。
推荐的方法是使用文字{}
和[]
MDN说:
> new Array(element0, element1, ..., elementN)
> new Array(arrayLength)
第一句构造了一个数组并将每个参数推入其中。第二句构造一个长度=arrayLength的Array。如果您尝试使用恰好是整数的单个元素构造-推送一个数组,会发生什么?明白了!
于 2013-06-01T21:53:54.207 回答