在环回中使用原型创建实例方法时出现问题

时间:2019-06-01 13:05:13

标签: javascript node.js prototype loopbackjs strongloop

我有两个模型,ModelA和ModelB。模型B包含以下属性:

"properties": {
    "firstname": {
      "type": "string",
      "required": true
    },
    "middlename": {
      "type": "string"
    },
    "lastname": {
      "type": "string"
    }
  }

我在ModelB中创建了一个实例方法,如下所示:

ModelB.js

'use strict';

module.exports = function(ModelB) {
  ModelB.prototype.getFullName = function() {
    console.log(this); // Display result output shown below
  }
};

I have the following result in ModelA

someTestVariable:
   { id: 'e0a844e4-6c8a-489a-8bd6-1d62267d311e',
     firstname: 'Thomas',
     middlename: '',
     lastname: 'Henry' 

   }

我试图从ModelA调用ModelB中的实例方法

ModelB.prototype.getFullName();

此关键字输出以下内容

ModelConstructor {
  firstname: [Getter/Setter],
  middlename: [Getter/Setter],
  lastname: [Getter/Setter],
  id: [Getter/Setter],
  getFullName: [Function],
  save: [Function],
  isNewRecord: [Function],
  getConnector: [Function],
  destroy: [Function],
  delete: [Function],
  remove: [Function],
  setAttribute: [Function: setAttribute],
  updateAttribute: [Function: updateAttribute],
  setAttributes: [Function: setAttributes],
  unsetAttribute: [Function: unsetAttribute],
  replaceAttributes: [Function],
  patchAttributes: [Function],
  updateAttributes: [Function],
  reload: [Function: reload] 
  }

我不确定如何从ModelA获取ModelB中的名字,中间名和姓氏数据。 任何帮助将非常感激。

1 个答案:

答案 0 :(得分:3)

定义这样的原型方法:

ModelB.prototype.getFullName = function() {
    return this.firstname;
}

// Call instance method by creating Model instance first.

let firstNameData = new ModelB(yourObjectDataFromModelA);

// Then call prototype function

firstNameData.getFullName();

希望这会清除您的疑问。

有关更多信息,请参阅以下环回文档:https://apidocs.strongloop.com/loopback-datasource-juggler/v/1.0.0/#manually-add-methods-to-the-model-constructor