【问题标题】:Why var a is undefined? Javascript OOP为什么 var a 未定义? Javascript 面向对象
【发布时间】:2013-04-26 17:37:46
【问题描述】:

我有这个代码。它创建一个带有 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);

【问题讨论】:

  • 当你提到“它”这个词时,你指的是代码的哪一部分? :)
  • 我找不到正确的单词(我的英语不太好,抱歉:P)
  • 你展示了a.width的结果。一个呢?也是未定义的吗?
  • 没问题;只是想澄清一下...因为“它”可能是您代码的任何部分;)
  • @DanielS。 a 被定义为一个对象。现在可以了:)

标签: javascript oop prototype


【解决方案1】:
var a = (new $(10,10)).$(30,30); //You need new
alert(a.width);

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


以下是您可以如何使用 2 个“点”对象(如 cmets 中所要求的)做您想做的事情:

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/

【讨论】:

  • @AreWojciechowski 这是多余且令人困惑的。为函数提供实际名称可能是个好主意:-)
  • 如果我们现在也在谈论命名,如果你开始使用certain JavaScript libraries ,以及。
  • @summea 一些库使用$,不仅仅是jQuery :-P
  • @Neal 这就是为什么我写了“图书馆”的复数形式... ;) (现在链接更新了)
  • 喜欢 Point(10,10).Point(30,30)?我想尽可能短地命名它。这只是为了练习:P
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2012-05-31
    • 2021-12-10
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多