在Javascript中扩展(继承)类(或对象)

时间:2017-03-16 12:05:17

标签: javascript object inheritance intern ui-testing

我正在开发一个UI自动化项目,我希望从另一个页面对象扩展一个页面对象。我用Google搜索了实现这一目标的方法,但无法找到我正在寻找的内容。 基本上我有一个像这样的代码设置。

BasePage.js

    define([],
         function () {

            function BasePage(remote) {
             this.remote = remote;

            }

            BasePage.prototype = {
              constructor: BasePage,
             // common methods to interact with page

             commonMethodToIntreactWithPage : function{
               return doSomething;
             }
    };

    return BasePage;
});

LoginPage.js

    define([],
         function () {

            function LoginPage(remote) {
             this.remote = remote;

            }

            LoginPage.prototype = {
              constructor: BasePage,
             // Login Page related Methods

             loginPageRelatedMethod: function{
               return doSomething;
             }
    };

    return LoginPage;
});

我想通过这样做继承BasePageLoginPage的方法:

var loginPage = new LoginPage(remote);
loginPage.commonMethodToIntreactWithPage();

仅供参考,我正在使用Intern.js进行测试。

1 个答案:

答案 0 :(得分:1)

你需要定义这样的东西。第一行将使用属性和方法创建一个新对象,这些属性和方法位于BasePage.prototype中,并将原型引用设置为此对象,因此每个LoginPage对象都将具有这些属性和对象。毕竟,我添加了仅与LoginPageloginPageRelatedMethod)相关的所有特定数据。并且设置正确的constructor

也很重要
LoginPage.prototype = Object.create(BasePage.prototype);

LoginPage.prototype.constructor = LoginPage;

LoginPage.prototype.loginPageRelatedMethod = function(){
    return doSomething;
}

<强>已更新

function LoginPage(remote) {
   BasePage.call(this, remote);
}

实施例

function BasePage(remote) {
   this.remote = remote;
}

BasePage.prototype = {
   constructor: BasePage,    
   commonMethodToIntreactWithPage : function() {
      return 'From Base Page';
   }
};

function LoginPage(remote) {
   BasePage.call(this, remote);
}

LoginPage.prototype = Object.create(BasePage.prototype);

LoginPage.prototype.constructor = LoginPage;

LoginPage.prototype.loginPageRelatedMethod = function () {
   return 'From Login Page';
}

var loginPage = new LoginPage('Test');
console.log(loginPage.commonMethodToIntreactWithPage());