[英]What does Object.create( Class.prototype ) do in this code?
[英]What does a Javascript Object.create do?
我的应用程序使用量角器和“页面模型”进行测试。 有一个看起来像这样的外部模块:
'use strict';
var AdminTestPage = function () {
browser.get('/');
};
AdminTestPage.prototype = Object.create({}, {
detailTabClear: {
get: function () {
element(by.id('name')).clear();
}
}
});
module.exports = AdminTestPage;
有人可以解释为什么开发人员使用Object.create吗? 这与仅合并代码的第一部分和第二部分有什么不同?
如文档Object.defineProperty
中所述,默认情况下,属性描述符中的属性变为不可枚举和不可配置 。
因此通话与
AdminTestPage.prototype = Object.create({}, {
detailTabClear: {
get: function () {
element(by.id('name')).clear();
},
enumerable: false,
configurable: false
}
});
这意味着什么? 这意味着当您使用for...in
遍历对象时,此属性将不会显示for...in
并且您将无法通过delete
从对象中将其delete
。
可能是这样写的
Object.defineProperty(AdminTestPage.prototype, 'detailTabClear', {
get: function () {
element(by.id('name')).clear();
}
});
注意:这与直接分配属性非常不同。 默认情况下,通过赋值语句创建的属性(即obj.prop = foo
)是可枚举和可配置的。
我是否可以说这是否是作者的意图。
同样的问题,我不知道为什么开发人员决定使用Object.create
。
Object.create
完全按照它说的去做。 它创建一个对象,在这种情况下,与使用简写表示法没有区别...
AdminTestPage.prototype = {...};
完全一样。 当您已经有对象的原型并且要创建同一对象的另一个“实例”时, Object.create
最为有用,因为它“继承”了原型,因此您不必定义其所有成员。 例如,考虑这个原型...
var car = { make: "", model: ""};
然后,您可以创建汽车的实例...
var subaru = Object.create(car);
subaru
变量已经是car的原型了……用OOP的话来说,它就像是car的实例……
subaru.make = "Subaru";
subaru.model = "WRX";
请注意,并非所有浏览器都支持Object.create
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.