Tow*_*wer 8 javascript ecmascript-5 object-create
new到目前为止,我一直在使用JavaScript中的关键字.我一直在阅读Object.create,我想知道是否应该使用它.我不太明白的是我经常需要运行构造代码,因此我看不到Object.create它将如何工作,因为它不会触发任何运行的函数.
谁能告诉我,在哪种情况下我应该使用Object.create而不是new?
Fel*_*ing 13
到目前为止,如果要创建对象,则只能使用文字:
var obj = {};
Run Code Online (Sandbox Code Playgroud)
或Object构造函数.
var obj = Object();
Run Code Online (Sandbox Code Playgroud)
但是这些方法都不允许您指定所创建对象的原型.
这就是你Object.create现在可以做的.它允许您创建新对象并将第一个参数设置为新对象的原型.此外,它允许您设置作为第二个参数提供的新对象的属性.
它类似于做这样的事情(没有第二个参数):
function create(proto) {
var Constr = function(){};
Constr.prototype = proto;
return new Constr();
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您正在使用类似于此的构造,那么当您想要使用时Object.create.
它不是替代品new.它更像是一个创建单个对象的补充,它应该更容易从另一个对象继承.
例:
我有一个对象a:
var a = {
someFunction: function() {}
};
Run Code Online (Sandbox Code Playgroud)
我想b扩展这个对象.然后你可以使用Object.create:
b = Object.create(a);
b.someOtherFunction = function(){};
Run Code Online (Sandbox Code Playgroud)
只要你有一个构造函数,但是你只从中实例化一个对象,你就可以用它替换它Object.create.
适用的一般规则.它在很大程度上取决于构造函数的作用以及如何从其他对象继承等.
正如已经提到的,Object.create()当您想要一种简单的方法来设置新对象的原型时,通常会使用它。但其他答案没有提到的是,构造函数(需要 new)与任何其他函数并没有什么不同。
事实上,任何函数都可以返回一个对象,并且在 JavaScript 中常见工厂函数(如构造函数,但它们不需要new或 usethis来引用新对象)。工厂函数经常用来Object.create()设置新对象的原型。
var barPrototype = {
open: function open() { /* ... */ },
close: function close() { /* ... */ },
};
function createBar() {
return Object.create(barPrototype);
}
var bar = createBar();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4821 次 |
| 最近记录: |