首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在任务的双方使用“此”

问不能在任务的双方使用“此”
EN

Stack Overflow用户
提问于 2022-04-22 13:19:19
回答 1查看 81关注 0票数 1

我也想让我的函数addHat()对其他person对象可重用,所以我决定使用this代替这个人的确切名称,并通过addHat.call()和addHat.apply()方法将其他对象传递为this。

即。我希望使用spread浅拷贝person对象(对所有属性都有新的引用)。

但是,它不能在分配的两边使用this。

​

代码语言:javascript
复制
let person1 = {
    a: "a",
    hats: [],
  gloves: []
};

function addHat(newHat, ...params) {
    this = {
        ...this,
        hats: [...this.hats, newHat, ...params],
    };
}

addHat.call(person1, "hatA");
console.log(person1.hats);

​

但是当直接使用这个名称时,它是非常有效的:

​

代码语言:javascript
复制
let person1 = {
    a: "a",
    hats: [],
  gloves: []
};


function addHat(newHat, ...params) {
  person1 = {
    ...person1,
        hats: [...person1.hats, newHat, ...params],
    };
}

addHat.apply("uselessThis", ["hatA", "hatB"]);
console.log(person1.hats);

​

你能帮我使这个函数在当前格式下可重用吗?(使用对象属性的扩展和浅拷贝)

每一个提示或帮助都将是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-22 13:26:06

我认为,如果您将角色作为函数的参数传递,则会更容易。

尽量避免在js中使用这一点,因为调试会变得很棘手。

​

代码语言:javascript
复制
let person1 = {
  a: "a",
  hats: [],
  gloves: []
};

function immutableAddHat(person, ...newHats) {
  return {
    ...person,
    hats: [...person.hats, ...newHats],
  };
}

function addHat(...newHats) {
  Object.entries(this).forEach(([k, v]) => {
    this[k] = v
  })

  this.hats = [...this.hats, ...newHats]

}

const newPerson1 = immutableAddHat(person1, "hatA");

console.log(newPerson1.hats);

addHat.call(person1, "Hatb")

console.log(person1)

​

我添加了使用以下内容的方法

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71969435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档