首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的变量在类函数中不可访问?

为什么我的变量在类函数中不可访问?
EN

Stack Overflow用户
提问于 2017-08-05 20:18:14
回答 3查看 102关注 0票数 0

我试图从类函数中更改构造函数中定义的变量的值。当我试图改变它或打印它时,我得到的一切是:

未定义的TypeError:无法设置未定义的属性“daysNumber”

我不确定,但我认为这可能是因为以不寻常的方式调用这个函数。

我根据构造函数中的选项调用函数。因此,如果其中一个选项是 called ,则称为setWeekends

setWeekends函数内部发生错误。

代码语言:javascript
运行
复制
"use strict";

class Calendar{
    constructor(element, params){
        this.element = element;
        this.params = params;
        this.parseParams();
        this.date = new Date();
        this.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
        this.teachingHoursRange = ['7:10-7:55', '8:00-8:45', '8:50-9:35', '9:45-10:30', '10:50-11:35', '11:40-12:25', '12:30-13:15', '13:20-14:05', '14:10-14:55', '15:00-15:45'];
        // How many days will be displayed
        this.daysNumber = 5;
        // How many hours will be displayed
        this.teachingHoursNumber = 10;
        this.init();
    }

    init(){
        // Some important code
    }

    parseParams(){
        // Look for all parameters in this.params
        for (let key in this.params){
            // Make the first char capitalize
            let capitalizedKey = key.charAt(0).toUpperCase() + key.substr(1).toLowerCase();
            let functionName = "set" + capitalizedKey;

            // Look for member function set by function name
            let fn = this[functionName];

            // If fn is function, call it
            if (typeof fn === 'function') fn(this.params[key])

        }
    }

    setWeekends(value){
        if(value === true)
            this.daysNumber = 7
    }
}

这是我称之为这个类的源代码。它位于不同的.js文件中。

代码语言:javascript
运行
复制
let calendar = new Calendar("calendar", {
    weekends: true
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-05 20:28:41

parseParams()中调用函数时,需要传递上下文。您可以通过使用.call()方法调用函数来实现这一点。

代码语言:javascript
运行
复制
parseParams(){
    // Look for all parameters in this.params
    for (let key in this.params){
        // Make the first char capitalize
        let capitalizedKey = key.charAt(0).toUpperCase() + key.substr(1).toLowerCase();
        let functionName = "set" + capitalizedKey;

        // Look for member function set by function name
        let fn = this[functionName];

        // If fn is function, call it
        if (typeof fn === 'function') fn.call(this, this.params[key])

    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-08-05 20:27:19

setWeekends方法更改为

代码语言:javascript
运行
复制
setWeekends = (value) => {
    if(value === true)
        this.daysNumber = 7
}
票数 0
EN

Stack Overflow用户

发布于 2017-08-05 20:35:09

尝尝这个

代码语言:javascript
运行
复制
parseParams(){
     let vm = this;
        // Look for all parameters in this.params
        for (let key in this.params){
            // Make the first char capitalize
            let capitalizedKey = key.charAt(0).toUpperCase() + key.substr(1).toLowerCase();
            let functionName = "set" + capitalizedKey;

            // Look for member function set by function name
            let fn = this[functionName];

            // If fn is function, call it
            if (typeof fn === 'function') fn(vm, this.params[key])

        }
    }


setWeekends(vm, value){
        if(value === true)
            vm.daysNumber = 7
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45526045

复制
相关文章

相似问题

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