Javascript中的子类Parse.Object

时间:2014-12-26 12:32:28

标签: java javascript constructor parse-platform

请原谅我,如果这是一个愚蠢的问题,我现在已经做了iphone和android一段时间了,最​​近我需要为网络开发。 我使用parse.com来处理我的服务器请求。根据他们的documentation,我可以像这样做一个子类。

//A complex subclass of Parse.Object
var Monster = Parse.Object.extend("Monster", {
  // Instance methods
  hasSuperHumanStrength: function () {
    return this.get("strength") > 18;
  },
  // Instance properties go in an initialize method
  initialize: function (attrs, options) {
    this.sound = "Rawr"
  }
}, {
  // Class methods
  spawn: function(strength) {
    var monster = new Monster();
    monster.set("strength", strength);
    return monster;
  }
});

var monster = Monster.spawn(200);
alert(monster.get('strength'));  // Displays 200.
alert(monster.sound); // Displays Rawr.

最终我试图将以下代码从Java翻译成JS。

/**
 * @author XujieSong
 *
 */
@ParseClassName("_User")
public class SHUser extends ParseUser {

    /**
     * SHUser is a subclass of ParseUser
     * Class name _User
     */

    /**
     * Default constructor
     */
    public SHUser() {

    }

    /**
     * Create a SHUser object with known objectId
     * This method only returns a SHUser without data
     * @param   userID  the objectId of the SHUser
     * @return  user    a reference to a SHUser
     */
    public SHUser(String userId) {
        this.setObjectId(userId);
    }

    /**
     * Create a new SHUser with attributes
     * @param userName
     * @param password
     * @param email
     * @param displayName
     * @param installation
     * @param profileImage
     * @return user a new user
     */
    public SHUser(String userName, String password, String email, String displayName) {
        this.setUsername(userName);
        this.setPassword(password);
        this.setEmail(email);
        this.setDisplayName(displayName);
    }
}

这就是我到目前为止所做的,

var SHUser = Parse.Object.extend("_User", {
  /**
   * Instance properties go in an initialize method
   * @param  {userId}
   * @return {[type]}
   */
  SHUser: function () {

  },
  /**
   * Instance properties go in an initialize method
   * @param  {userId}
   * @return {[type]}
   */
  SHUser: function (userId) {
    this.id = userId;
  },
  /**
   * Instance properties go in an initialize method
   * @param  {userName}
   * @param  {password}
   * @param  {email}
   * @param  {displayName}
   * @return {[type]}
   */
  SHUser: function (userName, password, email, displayName) {
    this.setUsername(userName);
    this.setPassword(password);
    this.setEmail(email);
    this.setDisplayName(displayName);
  }
}, {
  // Class methods
});

之后

var user = new SHUser(userId);
window.alert(Shelf.seller.id);

我未定义。

所以这就是问题所在。是否有可能有一个默认的构造函数,然后是一些自定义的构造函数,就像它在Java中的方式一样?这样做是一种好习惯吗?谢谢。

1 个答案:

答案 0 :(得分:3)

在Backbone.js中进一步挖掘之后,我找到了答案。 事实证明,不需要任何额外的编码。

var SHUser = Parse.Object.extend("_User", {
  /**
   * Instance properties go in an initialize method
   */
  initialize: function (attr, options) {

  },
}, {
  // Class methods
});

这是一个backbone.js模型,因此在初始化时,只需传入参数即可。它可以工作。

var seller = new SHUser({"id": sellerId});

就是这样!

有关详细信息,请参阅backbonejs.org