为什么var a没有定义?Javascript OOP

Why var a is undefined? Javascript OOP

本文关键字:Javascript OOP 定义 var 为什么      更新时间:2023-09-26

我有这个代码。它创建了一个带有x和y字段的对象。我想添加一个方法,它创建带有额外宽度和高度字段的新对象。但尽管我尝试了,它仍然返回未定义。怎么了?

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);
var a = (new $(10,10)).$(30,30); //You need new
alert(a.width);

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


下面是你如何用2个"Point"对象做你想做的事情(正如在评论中所要求的):

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/

您在$之前错过了new;如此:

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