创造新的JavaScript的对象
-
27-09-2019 - |
题
我是一个相对较新,对象为导向的方案编制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"
});
我喜欢怎样,第二种方式出现-的代码记录。但是我的问题是:
这种方式是"好"?
我可以使用这第二种方式 实例可变的一个对象 的类型,已定义使用 "经典"方式的定义 对象类型与该隐 构造?
如果我想创建一个系列 这些对象,是否有任何其他的 考虑?
在此先感谢。
解决方案
这是真下来的味道。这种方式:
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"
});
想想有多少组合的重载(或跟踪的 null
s)你就必须要有处理性质,你可能会或可能不要提供给对象,用第一种方法。这是一个 很多 更具扩展性的和灵活的方法。
2)只要允许它的一个空白的构造,这是更清洁的实例。
3)长/可读性,特别是更多比一些对象。看看式,这是很清理/可读,再次至少给我,如果你喜欢这种风格,创造阵你看起来象 非常 类似的方法#2.
好了,第二种方法看起来不错,是很有用的情况下"类",有很多的设置选择。但是,要知道,你实际上是在修建的另一个目的过程。
我劝你读了一些代码,从一个或另一个Javascript框架,并找到一种风格,申诉你。