javascript - 使用 Javascript 对象模型

标签 javascript raphael

我想要实现的是通过遵循更好的模式来创建一些对象。我正在使用 Raphael.js 库来创建图形形状。

问题出在以下行:

X: "" + this.canvas_X + this.paper["width"]/2 - self.width/4,

我收到的错误是:

Uncaught TypeError: Cannot read property 'width' of undefined

我发现错误位于 this.paper["width"]/2。 我是使用 javascript 的新手,无法理解我在做什么错误

var Graphics={
        create_canvas: function(){
                $("#canvasdiv").append("<div id='id1' width='80px' height='50px'></div>");
        },
        canvas_X:get_LEFT_TOP("canvasdiv")[0],
        canvas_Y:get_LEFT_TOP("canvasdiv")[1],
        canvas_width:function(){return $("#canvasdiv").width()},
        canvas_height:function(){return $("#canvasdiv").height()},
        paper:{
            width:900,
            height:700,
            create: function(){
                return new Raphael(document.getElementById('canvasdiv'),this.width,this.height);
            }
        },
        vswitch:{
            color:"Black",
            text:"vSwitch",
            width:"150",
            height:"150",
            X: "" + this.canvas_X + this.paper["width"]/2 - self.width/4,
            Y: Graphics.canvas_Y,
            delay:"2000",
            create: function(paper){
                setTimeout(function(){
                        paper.rect(X,Y,width,height).attr({fill : "black"})
                        },delay);
            }
        },
}

这是进行调用的方式:

 Graphics.create_canvas();
    p=Graphics.paper.create();
    Graphics.vswitch.create(p);

最佳答案

输入代码后,尝试:Graphics.paper 它不应该抛出任何错误。但是 this.paper["width"] 没有 paper 作为属性。在这种情况下,this 指的是正在创建的对象,该对象将被称为 vswitch

查看此代码:

var obj = { x: 0, y: this.x }

浏览器不会提示,但 y 未定义。根据创建对象的规则,当它去创建 y 时,它不知道 x 存在于 thisobj 上。

以下作品:

var obj = { x: 0 }
obj.y = obj.x

提示:您在错误的时间使用了 this,我建议您探索 this 的含义。我会给你概要。

打开控制台并输入:

this
// Window -> blah blah

var f = function() {
    console.log(this);
}
f()
// Window -> blah blah

var me = {}
me.f = f
me.f()
// Object { f: f() }

简而言之,this 指的是函数的所有者。否则,它引用 Window,并且如果您正在创建一个对象,this 在对象完成之前(即在括号末尾)不会绑定(bind)。

关于javascript - 使用 Javascript 对象模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29179557/

相关文章:

javascript - 加载时间缓慢 : ISP or Coding

Javascript 只允许某些字符?

jquery - 合并来自 Raphael svg 的图像

svg - Raphael JS 组合路径

javascript - 如何判断一个对象是否是类型化数组?

javascript - React-三纤维 useEffect 、 useState、THREE.Clock

javascript - 背景切换器,当 div 到达页面顶部时

拉斐尔文字发光

javascript - 请解释通常用于定义 Dragging RaphaelJs 的 javascript 逗号语法

javascript - Raphael.js 在路径上居中放置文本