gpt4 book ai didi

javascript - 如何使用原型(prototype)方法更改类中的值?

转载 作者:行者123 更新时间:2023-11-30 14:46:42 25 4
gpt4 key购买 nike

在下面的代码中,我尝试使用原型(prototype)方法 .rest 将属性 isTired 的值更改为 true。当我用 mommy.rest() 或 mommy.rest.bind(mommy) 调用它时,它会将 isTired 变为 true。如果我在结果为真后立即调用 mommy.isTired。

但是,如果我删除调用,它会将值变为 false。我正在查看其他堆栈溢出响应,我相信这可以通过使用绑定(bind)来解决。我读过 MDM,但似乎无法找到保留值(value)的方法。

var SuperHero = function() {
this.isTired = false;
}

SuperHero.prototype.rest = function() {
this.isTired = true;
console.log(this.isTired)
}

var SuperHuman = function(greeting) {
SuperHero.call(this)
this.greeting = greeting;
this.speed = 'normal';
}

SuperHuman.prototype = Object.create(SuperHero.prototype)
SuperHuman.prototype.constructor = SuperHuman
var mommy = new SuperHuman('hola')


var mom = mommy.rest.bind(mommy)
mom() // -> outputs true
mommy.isTired //-> outputs true if I keep mom(), but if i delete it it turns false

最佳答案

你的代码大部分是正确的,但最后你搞混了。

第一行之后的所有内容都是错误的。

var mommy = new SuperHuman('hola')

var mom = mommy.rest.bind(mommy)
// mom() // -> outputs true
mommy.isTired //-> outputs true if I keep mom(), but if i delete it it turns false

只需这样做:

var mommy = new SuperHuman('hola')
mommy.rest();
// mommy.isTired is now true

只要您对 mommy 的引用存在,isTired 就会保持为真,直到/除非另一个函数更改它。

在这种情况下,使用 bind 对您没有任何帮助。 bind 所做的只是在不同的 this 的上下文中执行一个函数。这不适用于这种情况。

关于javascript - 如何使用原型(prototype)方法更改类中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48799590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com