Javascript 在mootools的自定义方法中使用选项构造函数中定义的属性

Javascript 在mootools的自定义方法中使用选项构造函数中定义的属性,javascript,mootools,raphael,options,Javascript,Mootools,Raphael,Options,我从Mootools框架开始。因为我希望代码是可重用的,所以我尝试用类来实现 在下面显示的代码中,目的是使用Raphael framework for SVG绘制地图。代码运行正常,但我对选项对象中的属性有问题 var Map = new Class({ Implements : [ Options ], pathsArr: {}, Options: { canvas: { container: 'map', cheight: 500,

我从Mootools框架开始。因为我希望代码是可重用的,所以我尝试用类来实现

在下面显示的代码中,目的是使用Raphael framework for SVG绘制地图。代码运行正常,但我对
选项
对象中的属性有问题

var Map = new Class({

Implements : [ Options ],

pathsArr: {},

Options: {
    canvas: {
        container: 'map',
        cheight: 500,
        cwidth: 900,
    },
    attributes: {
        fill: '#006699',
        stroke: '#3899E6',
        'stroke-width': 1,
        'stroke-linejoin': 'round'
    }   
},

initialize: function (pathsArr, options){
    this.setOptions(Options);
    this.pathsArr = paths;
    console.log(this.pathsArr);
},

setCanvas: function(){
    console.log(this.Options.canvas);
    R = Raphael(this.Options.canvas.container, this.Options.canvas.cwidth, this.Options.canvas.cheight);
    return R;
},

drawPaths: function(){
    console.log(this.Options.attributes);
    for (var country in this.pathsArr){
        var shape = R.path(this.pathsArr[country].path);
        var attri = this.Options.attributes;
        console.log(attri);

    }
}
}))

好的,你可以看到我正在使用
console.log
来理解这里发生的事情。当我检查行中的属性时

console.log(this.Options.attributes);
我在谷歌Chrome控制台中得到了这个

当我想我需要一些东西时,比如当我检查
路径时发生了什么,它在
选项
对象之外

var Map = new Class({

Implements : [ Options ],

pathsArr: {},

Options: {
    canvas: {
        container: 'map',
        cheight: 500,
        cwidth: 900,
    },
    attributes: {
        fill: '#006699',
        stroke: '#3899E6',
        'stroke-width': 1,
        'stroke-linejoin': 'round'
    }   
},

initialize: function (pathsArr, options){
    this.setOptions(Options);
    this.pathsArr = paths;
    console.log(this.pathsArr);
},

setCanvas: function(){
    console.log(this.Options.canvas);
    R = Raphael(this.Options.canvas.container, this.Options.canvas.cwidth, this.Options.canvas.cheight);
    return R;
},

drawPaths: function(){
    console.log(this.Options.attributes);
    for (var country in this.pathsArr){
        var shape = R.path(this.pathsArr[country].path);
        var attri = this.Options.attributes;
        console.log(attri);

    }
}

在我需要属性属性的地方,什么都不会发生。就像这两行

var attri = this.Options.attributes;
shape.attr(attri);
我不明白为什么如果我这样做,它会得到正确的结果

console.log(this.Options.attributes.fill);

好吧,就是这样,我被困在这里,我希望有人能向我解释为什么会发生这种情况。谢谢

Javascript区分大小写。使用
setOptions(options)
this.options
代替
options
。只有在引用了
选项
变量时,大写字母
O
才存在,如
实现:[Options]
指令中所述

当前,您的
Options
成员无法通过
setOptions
调用进行设置,因为它正在查找
this.Options

您只使用了
此。选项
,这是您的默认选项,永远不会更新。和
this.options
被设置为
options
mutator,正如您在编写
this.setOptions(options)
时所指示的那样

编辑:

此外,在以下代码中:

initialize: function (pathsArr, options){
    this.setOptions(Options);
    this.pathsArr = paths;  // <----- `paths` is undefined
初始化:函数(路径、选项){
此选项。设置选项(选项);

this.pathsArr=paths;//Javascript区分大小写。使用
setOptions(options)
this.options
而不是
options
。只有在引用
options
mutator时,大写字母
O
才存在,如
Implements:[options]
指令中所述

当前,您的
Options
成员无法通过
setOptions
调用进行设置,因为它正在查找
this.Options

您只使用了
this.Options
,这是您的默认选项,永远不会更新。并且
this.Options
被设置为
Options
mutator,正如您在编写
this.setOptions(Options)
时所指示的那样

编辑:

此外,在以下代码中:

initialize: function (pathsArr, options){
    this.setOptions(Options);
    this.pathsArr = paths;  // <----- `paths` is undefined
初始化:函数(路径、选项){
此选项。设置选项(选项);

this.pathsArr=path;//哇,这是一个完整的答案!语法更正+问题的答案。非常感谢!我同时学习英语和JavaScript编程!哇,这是一个完整的答案!语法更正+问题的答案。非常感谢!我同时学习英语和JavaScript编程时间