2015-12-06 2 views
1

У меня есть файл javascript, и я определил функцию getchartType(), и я хотел бы присвоить значение возвращаемой строки для свойства объекта javascript. Но я получаю ошибку в консоль, для которой getchartType не определен.Ошибка Javascript - x не является функцией

var that = this; 
 
var gadgetConfig = { 
 
    "id": "usage-cities", 
 
    "title": "usage-cities", 
 
    "datasource": "CITY_USAGE", 
 
    "type": "batch", 
 
    "columns": [{ 
 
    "name": "max_usage", 
 
    "type": "FLOAT" 
 
    }, { 
 
    "name": "metro_area", 
 
    "type": "STRING" 
 
    }, { 
 
    "name": "avg_usage", 
 
    "type": "FLOAT" 
 
    }, { 
 
    "name": "min_usage", 
 
    "type": "FLOAT" 
 
    }], 
 
    "maxUpdateValue": 0, 
 
    "chartConfig": { 
 
    "chartType": "line", 
 
    "yAxis": [2], 
 
    "xAxis": 1, 
 
    "interpolationMode": "monotone" 
 
    }, 
 
    "domain": "carbon.super" 
 
}; 
 

 
gadgetConfig.chartConfig["chartType"] = String(that.getChartType()); 
 
//console.log(" this is checking "+ gadgetConfig.chartConfig["chartType"]); 
 

 

 
var getChartType = function() { 
 
    var prefs = new gadgets.Prefs(); 
 
    var chartTypeQ = prefs.getString('ChartType'); 
 
    console.log("===========chartType========" + chartTypeQ); 
 
    console.log("===========typeOf========" + typeof(chartTypeQ)); 
 
    return chartTypeQ; 
 
}; 
 

 
console.log("========#### ===========" + getChartType());

Может кто-нибудь, пожалуйста, мне советы, как преодолеть эту ошибку?

+0

'вар, что = это;' - что 'this'? (В каком контексте вы используете скрипт) – CoderPi

+1

Вы вызываете функцию перед назначением выражения функции 'getChartType'. В отличие от простых «функций», это означает, что функция не будет поднята. Назначьте 'getChartType' перед его вызовом (или используйте простой оператор' function'). –

ответ

3

Она будет работать следующим образом:

Проблема заключалась в том, что функция (getChartType()) не был определен в this/that, когда ты где называть его. Вы должны определить функцию перед вызовом в JavaScript:

this.getChartType = function... 

var that = this; 
 
var gadgetConfig = { 
 
    "id": "usage-cities", 
 
    "title": "usage-cities", 
 
    "datasource": "CITY_USAGE", 
 
    "type": "batch", 
 
    "columns": [{ 
 
    "name": "max_usage", 
 
    "type": "FLOAT" 
 
    }, { 
 
    "name": "metro_area", 
 
    "type": "STRING" 
 
    }, { 
 
    "name": "avg_usage", 
 
    "type": "FLOAT" 
 
    }, { 
 
    "name": "min_usage", 
 
    "type": "FLOAT" 
 
    }], 
 
    "maxUpdateValue": 0, 
 
    "chartConfig": { 
 
    "chartType": "line", 
 
    "yAxis": [2], 
 
    "xAxis": 1, 
 
    "interpolationMode": "monotone" 
 
    }, 
 
    "domain": "carbon.super" 
 
}; 
 

 

 
this.getChartType = function() { 
 
    var prefs = new gadgets.Prefs(); 
 
    var chartTypeQ = prefs.getString('ChartType'); 
 
    console.log("===========chartType========" + chartTypeQ); 
 
    console.log("===========typeOf========" + typeof(chartTypeQ)); 
 
    return chartTypeQ; 
 
}; 
 

 
gadgetConfig.chartConfig["chartType"] = String(that.getChartType()); 
 
//console.log(" this is checking "+ gadgetConfig.chartConfig["chartType"]); 
 

 

 

 
console.log("========#### ===========" + getChartType());

+0

Как именно 'getChartType' когда-либо становится свойством * любого * объекта? Это всего лишь локальная переменная. – Pointy

+0

это происходит в контексте 'this' - посмотрите пример sir, он назовет' getCharType'! – CoderPi

+0

@Pointy, в контексте вопросника, 'this' является глобальным объектом, так что это' that', а «locals» - «глобальные». –

Смежные вопросы