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