繁体   English   中英

Javascript Object.create有什么作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM