';这个.name';在Javascript ES6类中,它是否可以是';名称';?

';这个.name';在Javascript ES6类中,它是否可以是';名称';?,javascript,class,ecmascript-6,Javascript,Class,Ecmascript 6,我有一个运行良好的类,但我只是好奇是否可以更改它,以便在我的模板中键入name而不是this.name。使用ES5类样式,我认为您可以执行类似于this.template=function(content,I){}的操作,但我还没有让this.template(content,I){}正常工作。这是可能的,还是每次我想从json返回name键时,我都在写this.name person = class { constructor(data) { Object.assign(this, dat

我有一个运行良好的类,但我只是好奇是否可以更改它,以便在我的模板中键入
name
而不是
this.name
。使用ES5类样式,我认为您可以执行类似于
this.template=function(content,I){}
的操作,但我还没有让
this.template(content,I){}
正常工作。这是可能的,还是每次我想从json返回name键时,我都在写
this.name

person = class {
  constructor(data) { Object.assign(this, data); }
  template(content, i) {
    content.push(`
      <div class="card">
        <div class="card-block">
          ${key('<h4 class="card-title">', this.name, '</h4>')}
          ${key('<h6 class="card-subtitle text-muted">', this.title, '</h6>')}
        </div>
        <ul class="list-group list-group-flush">
          ${each('<li class="list-group-item">', this.school.reverse(), '</li>')}
        </ul>
        <div class="card-block">
          <a class="btn btn-secondary" href="#" role="button">Bio</a>
        </div>
      </div>
    `);
  }
};
person=class{
构造函数(数据){Object.assign(this,data);}
模板(内容一){
内容推送(`
${key('',this.name'')}
${key('',this.title,'')}
    ${each(“
  • ”,this.school.reverse(),“
  • ”)}
`); } };
使用说明Es6
人=阶级{
构造函数(数据){Object.assign(this,data);}
模板(内容一){
设{name}=this;
内容推送(`
${key('',name,'')}
${key('',this.title,'')}
    ${each(“
  • ”,this.school.reverse(),“
  • ”)}
`); } };
使用说明Es6
人=阶级{
构造函数(数据){Object.assign(this,data);}
模板(内容一){
设{name}=this;
内容推送(`
${key('',name,'')}
${key('',this.title,'')}
    ${each(“
  • ”,this.school.reverse(),“
  • ”)}
`); } };

模板(内容,一){
const{name,title,…}=这个;
内容推送(`
${key('',name,'')}
...
如果这不够简短,请坚持使用自定义模板系统

至于
this.template
,比较是不正确的。
template(content,i){…}
是类方法的语法,它是
class.prototype.template=函数模板(content,i){…}
的快捷方式;

模板(内容,一){
const{name,title,…}=这个;
内容推送(`
${key('',name,'')}
...
如果这不够简短,请坚持使用自定义模板系统


至于
this.template
,比较是不正确的。
template(content,i){…}
是类方法的语法,它是
class.prototype.template=函数模板(content,i){…}
的快捷方式;

您可以用(this){…}将方法的内容包装在
语句…如果类语法不强制使用严格模式,则禁止使用
with
模式。我喜欢这样的声音。这让我想将类转换为ES5。然后请注意
with
会带来重要的性能损失,被认为是不好的做法。但是,是的,会起作用。哦,在这种情况下,这样做是没有意义的。不过,你还是这样做了回答问题。我从来没有实际使用过
with
。您可以使用(this){…}将方法的内容包装在
语句…如果类语法不强制使用严格模式,则禁止使用
with
模式。我喜欢这样的声音。这让我想将类转换为ES5。然后请注意
with
会带来重要的性能损失,被认为是不好的做法。但是,是的,会起作用。哦,在这种情况下,这样做是没有意义的。不过,你还是这样做了回答这个问题。我从来没有将
实际用于
。我看到这回答了我的问题。在我的用例中,我试图保留它,这样我就不必在变量中实际记录键名。我尝试使用生成的键名遵循您的方法,但我遇到了问题。我不确定这为什么不起作用。
var{Object.keys(this.toString()}=this;
我尝试了十几种不同的方法来构建对象,但最终,似乎它可能必须手动输入以避免
。我尝试这样做的唯一原因是,如果我让用户编写模板,他们就不必担心编写键名以外的任何内容。不是这样的,你知道吗可能需要阅读更多相关内容。this
const{name,title,…}=this
允许IDE执行静态分析,并在某些属性不存在时提醒开发人员。这是JS可以建议的。我建议不要将
一起使用,因为它具有不推荐使用的状态(理由非常充分)。要使非开发人员的模板可编辑,请使用第三方模板(把手、Swig等),这些模板能够完成一些简单的工作,并从提供的上下文中获取密钥(例如,
)自动。是的,我不知道为什么我要自己做模板。使用这样一个经过验证的引擎确实更有意义。感谢您在这种情况下的投资。我看到这回答了我的问题。在我的用例中,我试图保留它,这样我就不必在变量中实际记录键名。我尝试了遵循您的ethod生成了密钥名,但我遇到了问题。我不确定为什么这不起作用。
var{Object.keys(this.toString()}=this;
我尝试了十几种不同的方法来构建对象,但最终,似乎它可能必须手动输入以避免
。我尝试这样做的唯一原因是,如果我让用户编写模板,他们就不必担心编写键名以外的任何内容。不是这样的,你知道吗可能需要阅读更多相关内容。this
const{name,title,…}=this
允许IDE执行静态分析并提醒de
Use desctructing Es6

person = class {
  constructor(data) { Object.assign(this, data); }
  template(content, i) {
    let {name} = this;
    content.push(`
      <div class="card">
        <div class="card-block">
          ${key('<h4 class="card-title">', name, '</h4>')}
          ${key('<h6 class="card-subtitle text-muted">', this.title, '</h6>')}
        </div>
        <ul class="list-group list-group-flush">
          ${each('<li class="list-group-item">', this.school.reverse(), '</li>')}
        </ul>
        <div class="card-block">
          <a class="btn btn-secondary" href="#" role="button">Bio</a>
        </div>
      </div>
    `);
  }
};
  template(content, i) {
    const {name, title, ...} = this;
    content.push(`
      <div class="card">
        <div class="card-block">
          ${key('<h4 class="card-title">', name, '</h4>')}
          ...