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

标签 javascript class bind

在下面的代码中,我尝试使用原型(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/

相关文章:

Javascript 环境变量

javascript - NumberTextBox 只允许整数

javascript - 无法看到 MapBox React Native GL 注释

python - 自动初始化实例变量?

javascript - 绑定(bind)到 Array.includes [javascript]

javascript - 用 Ruby 和 JS 编写相同的函数,Ruby 可以工作,但 JS 未定义

c++ - 什么时候应该在 C++ 中使用文字类?

java - 需要Java帮助来组合Gui中的多个类

c++ - boost::bind、boost::asio、boost::thread 和类

javascript - JavascriptInterface在版本> 2.1上不起作用