我是一个相对较新,对象为导向的方案编制JavaScript,我是不确定的"最佳"方式确定和使用的对象在JavaScript。我已经看到"规范"的方式来定义的目的和实例一个新的实例,如下所示。

function myObjectType(property1, propterty2) {
    this.property1 = property1,
    this.property2 = property2
}
// now create a new instance
var myNewvariable = new myObjectType('value for property1', 'value for property2');

但我已经看到其他的方式来创建新的实例的对象,在这个方式:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

我喜欢怎样,第二种方式出现-的代码记录。但是我的问题是:

  1. 这种方式是"好"?

  2. 我可以使用这第二种方式 实例可变的一个对象 的类型,已定义使用 "经典"方式的定义 对象类型与该隐 构造?

  3. 如果我想创建一个系列 这些对象,是否有任何其他的 考虑?

在此先感谢。

有帮助吗?

解决方案

这是真下来的味道。这种方式:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

...通常更好,如果有超过2/3的论点,因为它艾滋病的可读性并使其更容易避免《任择参数的问题(fn(null,null,null,123')).

另一个考虑因素是业绩。通过辩论在传统的方式将更快,但是这种速度增仅成为重大,在性能非常敏感的情况。

我可以使用这第二种方式的实例可变的一个目的类型,已经使用定义的"经典"方式确定对象类型,隐含的构造?

不容易。如果你想化构造,通过使用哈希而不是仅仅通过的论点,你没有控制权的来源,然后你可以"包裹":

var _constructor = SomeConstructorFunction;

SomeConstructorFunction = function(hash) {
    return new _constructor(hash.property1, hash.property2);
};

我不会真的让你搞乱了第三方Api只是为了式。

如果我想要创造一系列的这些对象,是否有任何其他考虑?

有多大的阵?有什么阵列,用于到底是什么?性能可能值得考虑...

其他提示

最好的方式来创建javascript对象是放弃使用新的(至少是如果订阅该crockford营地)

myObjectType = function(props) {
  // anything defined on props will be private due to the closure

  props.privateVar = "private";

  // anything defined on obj will be public
  obj = {};

  obj.testing = new function() {
    alert(props.privateVar);
  };

  return obj;
};
instance = myObjectType({prop1: "prop"});

// if we want inheritance, it just means starting with the base type instead of
// a new object
subType = function(props) {
  obj = myObjectType(props);
  obj.subTypeProperty = "hello.";

  return obj;
};

第52页 Javascript:好的部分, 我强烈建议它:-)

1)我想说的方法#2的是更喜欢,对我来说无妨。例有2个属性是不同的,但是如果你想这样做:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
    //Leaving several properties out, don't want them populated
    property8:    "This is the value for property 8"
    property9:    "This is the value for property 9"

});  

想想有多少组合的重载(或跟踪的 nulls)你就必须要有处理性质,你可能会或可能不要提供给对象,用第一种方法。这是一个 很多 更具扩展性的和灵活的方法。

2)只要允许它的一个空白的构造,这是更清洁的实例。

3)长/可读性,特别是更多比一些对象。看看式,这是很清理/可读,再次至少给我,如果你喜欢这种风格,创造阵你看起来象 非常 类似的方法#2.

好了,第二种方法看起来不错,是很有用的情况下"类",有很多的设置选择。但是,要知道,你实际上是在修建的另一个目的过程。

我劝你读了一些代码,从一个或另一个Javascript框架,并找到一种风格,申诉你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top