Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带参数和setTimeout的Vue js方法_Javascript_Vue.js_Settimeout - Fatal编程技术网

Javascript 带参数和setTimeout的Vue js方法

Javascript 带参数和setTimeout的Vue js方法,javascript,vue.js,settimeout,Javascript,Vue.js,Settimeout,我不明白为什么这个代码能用 data: { return { userMinerals: 0, mineralsLimit: 1000, miners: 0, superMiner: 0, minerPrice: 10, superMinerPrice: 100, minersLimit: 10 } } methods: { counter() {

我不明白为什么这个代码能用

data: {
    return {
        userMinerals: 0,
        mineralsLimit: 1000,
        miners: 0,
        superMiner: 0,
        minerPrice: 10,
        superMinerPrice: 100,
        minersLimit: 10
    }
}
methods: {
    counter() {
        setInterval(() => {
            this.userMinerals += this.miners;

            if(this.checkLimit(this.userMinerals, this.mineralsLimit)) {
                this.userMinerals = this.mineralsLimit;
            }
        }, 100);
    },
    addMiner() {
        if (this.userMinerals >= this.minerPrice) {
            this.miners += 1;
            this.userMinerals -= this.minerPrice;
            this.counter();
        }
    }
}
。。但如果我尝试将参数放入counter()中,代码就会停止工作

methods: {
    counter(typeOfCredits) {
        setInterval(() => {
            typeOfCredits += this.miners;

            if(this.checkLimit(this.userMinerals, this.mineralsLimit)) {
                typeOfCredits = this.mineralsLimit;
            }
        }, 100);
    },
    addMiner() {
        if (this.userMinerals >= this.minerPrice) {
            this.miners += 1;
            this.userMinerals -= this.minerPrice;
            this.counter(this.userMinerals);
        }
    }
}
从控制台中,我可以看到typeOfCredits按其应该的方式递增,但它不会更新视图中的值。
帮助Thx是函数的一个参数。参数按值传递。修改它就像修改局部变量。

typeOfCredits
是函数的一个参数。参数按值传递。修改它就像修改一个局部变量。

您不能引用一个参数并期望它在外部被更改,但您可以将引用传递给一个可以在外部更改某些内容的对象

var $this = this;
this.counter({
    get() { return $this.userMinerals },
    set(val) { $this.userMinerals = val }
});
然后像这样在柜台上使用

    counter(typeOfCredits) {
        setInterval(() => {
            typeOfCredits.set(typeOfCredits.get() + this.miners);

            if(this.checkLimit(this.userMinerals, this.mineralsLimit)) {
                typeOfCredits.set(this.mineralsLimit);
            }
        }, 100);
    },

您不能引用参数并期望在外部对其进行更改,但可以将引用传递给可以在外部更改某些内容的对象

var $this = this;
this.counter({
    get() { return $this.userMinerals },
    set(val) { $this.userMinerals = val }
});
然后像这样在柜台上使用

    counter(typeOfCredits) {
        setInterval(() => {
            typeOfCredits.set(typeOfCredits.get() + this.miners);

            if(this.checkLimit(this.userMinerals, this.mineralsLimit)) {
                typeOfCredits.set(this.mineralsLimit);
            }
        }, 100);
    },

该视图没有对
typeOfCredits
的被动引用,我的意思是它是一个简单的变量,它不是
数据的属性
typeOfCredits
不是数据属性。您需要在
计数器
方法中使用
this.userMinerals
,因此我应该使用数据属性作为函数参数?视图没有对
类型信用
的被动引用,我的意思是它是一个简单的变量,它不是
数据
的属性
类型信用
不是数据属性。您需要在
计数器
方法中使用
this.userMinerals
,所以我应该使用数据属性作为函数参数?