我希望能够学习按照新的JavaScript ECMA 5标准创建对象,并在我的当前项目中使用它们,而不会破坏功能。但我看到未解释的东西,这让我害怕Object.create而不是构造函数继承
考虑下面的代码:
var foo = {
oldProp: 'ECMA Script 3',
newProp: 'ECMA Script 5'
};
// The new way of inheritance
var bar = Object.create(foo);
// and of assigning properties, if I am right
var bar2 = Object.create(Object.prototype, {
oldProp: { value: 'ECMA Script 3'},
newProp: { value: 'ECMA Script 5'}
});
// and then
bar;
// console output
Object {oldProp: "ECMA Script 3", newProp: "ECMA Script 5"}
// whereas !!
bar2;
Object {} // Why this?
此外,
bar.hasOwnProperty('oldProp'); // false, whereas
bar2.hasOwnProperty('oldProp'); // true !! It should be the other way round, right?
另外,我不能够改变的bar2
bar2.oldProp = "Marry had a little lamb";
bar2.oldProp; // "ECMA Script 3"
还有更多 -
for (k in bar2) console.log(bar2[k]) // undefined
上午我以正确的方式创建的对象? 我基本上想要实现的是摆脱构造函数。
旧代码:
var Slideshow = function(type) {
this.type = type;
this.deleteSlideshow = function() {
// some code
}
}
Slideshow.prototype.nextSlide = function() {
// lotsa code
}
var vanityFairSlideshow = new Slideshow('wide-screen');
我想更改为Object.create
,可能是一种这样的:
var Slideshow = Object.create({ /* prototype */ }, { /* properties and methods */ });
var vanityFairSlideshow = Object.create(Slideshow , { /* properties and methods */ });
请告诉我这样做的正确方法?
* *为什么你想摆脱建设者? – Bergi 2013-04-24 08:44:43
@Bergi,只是为了学习现代JavaScript,强调相同。不要把我误认为叛徒队友。对于详细的解释,我始终用构造函数的方式作为结构体 – 2013-04-24 18:37:56