为什么var a未定义? Javascript OOP

时间:2013-04-26 17:37:46

标签: javascript oop prototype

我有这个代码。它使用x和y字段创建一个对象。我想添加一个方法,该方法使用额外的宽度和高度字段创建新对象。但是,尽管我的尝试,它仍然返回undefined。有什么问题?

JSFiddle

function $ (x, y) {
    this.x = x;
    this.y = y;

    return this;
}

$.prototype.$ = function (x, y) {
    this.width = x - this.x;
    this.height = y - this.y;

    return this;
}

var a = $(10,10).$(30,30);
alert(a.width);

2 个答案:

答案 0 :(得分:4)

var a = (new $(10,10)).$(30,30); //You need new
alert(a.width);

让一个类的实例函数与该类具有相同的名称可能不是一个好主意 - 这有点令人困惑。


以下是如何使用2个“点”对象执行您想要的操作(如评论中所要求的):

var Point = (function(){
    var Point = function(x, y) {
        this.width = x;
        this.height = y;
    }
    Point.prototype.removePoint = function(point) {
        return new Point(point.width - this.width, point.height - this.height);
    }

    return Point;
})()

var a = new Point(10,10);
var b = new Point(30,30);

var c = a.removePoint(b);
alert(c.width);

小提琴:http://jsfiddle.net/maniator/d3fx7/

答案 1 :(得分:3)

您错过了new之前的$;这有效:

var a = new $(10,10).$(30,30);