繁体   English   中英

Object.create() ES6

[英]Object.create() ES6

你能帮我理解 ES6 和 Object 吗?

class Contact{
       constructor(name,tel,mail)
       this.name=name;
       this.tel=tel;
       this.mail=mail; 

    method1(){
    //code
   }
}

如果我想创建一个联系人,我可以使用

const me = new Contact('David','070809112','10 street of Paris')

但是我不能在 ES6 之前使用Object.create()我可以在 ES6 中使用 Object.create() 你能帮我吗?

ES6之前

var Contact ={
   init:function('name','tel','mail')
   this.name=name;
   this.tel=tel;
   this.mail=mail; 

method1 : function(){
  //code
 }
}
 var me = Object.create(Contact);
 me.init('David','070809112','10 street of Paris');

在这种情况下如何使用 Object.create() ? 用于创建新联系人。 谢谢

你可以继续做你正在做的事情,而不是使用class

如果您使用class ,则通常不使用Object.create Object.create的用例在很大程度上与class无关(它通常用于直接原型继承,而不是使用构造函数)。

如果您想使用class但由于某种原因不想使用new ,您可以使用Reflect.construct (而不是Object.create ):

 class Contact { constructor(name, tel, mail) { this.name=name; this.tel=tel; this.mail=mail; } method1(){ //code } } const c = Reflect.construct(Contact, ["name", "tel", "mail"]); console.log(c.name);

可以使用Object.createclass Contact ,就像这样:

// NOT A GOOD IDEA, see below
const c = Object.create(Contact.prototype);

这将创建一个使用Contact.prototype作为其原型的对象。 但它不会调用构造函数,之后你也不能调用构造函数( Contact.call(c, "name", "tel", "email")会失败)。 并且您无法确定不调用构造函数不会导致问题,因为class代码假定调用了构造函数(以及超级构造函数,如果有的话)。

TJ Crowder 的回答是我见过的最好的回答。 是的 Reflect.construct() 按预期工作,这节省了我一天的搜索时间,因为我有一个问题,我想在 laravel 刀片中调用一个带有实例的函数以及其他变量,但是在它们之间添加一个空格使愚蠢的事情打破所以我不能使用新的关键字。 javascript 的灵活性挽救了这一天。 学到了一门全新的东西,感谢您忘记了为什么不想使用 new 关键字并专注于回答问题。 我希望我能评论他的回答,但代表很低。

我有这个onclick={{$var1.".method( new MyClass(this.id,'".$var2."','".$var3."') )"}}

我有时讨厌模板引擎的另一个原因,它们可能会限制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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