代码之家  ›  专栏  ›  技术社区  ›  Stefan

Nativescript中的Javascript类/函数

  •  1
  • Stefan  · 技术社区  · 6 年前

    我正在尝试将NativeScript中的多个模型中的一些常见逻辑移到我希望在模型中需要的一个单独文件中。我没有任何Javascript经验,希望创建一个像Java中那样的类,但这似乎不起作用。

    有谁能解释一下哪里出了问题,我该怎么办?

    这是我目前拥有的(示例代码):

    CommonLogic。js公司

    function Person(lastName, firstName)
    {
       this.firstName = firstName;
       this.lastName = lastName;
    }
    

    型号1。js公司

    var Person = require("~/CommonLogic");
    
    exports.loaded = function(args) {  
        var person = new Person('Clouseau', 'Jacques');
        console.log('The person is ' + person);
    }
    

    错误:

    System.err: Calling js method onCreateView failed
    System.err:
    System.err: TypeError: Person is not a constructor
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Tarun Lalwani    6 年前

    创建以下函数时

    function Person(lastName, firstName)
    {
       this.firstName = firstName;
       this.lastName = lastName;
    }
    

    然后你试着像下面这样导入它

    var Person = require("~/CommonLogic");
    

    现在,您的代码中有另一个类 Person2

    function Person2(lastName, firstName)
    {
       this.firstName = firstName;
       this.lastName = lastName;
    }
    

    那么,现在如何导入这个?会做什么 var Person2 = require("~/CommonLogic"); 导入it人员2?这不是模块要求的工作方式。现在有两种方法可以导出类/方法。ES5路或ES6路

    ES5路

    function Person(lastName, firstName)
    {
       this.firstName = firstName;
       this.lastName = lastName;
    }
    
    module.exports = { Person: Person}
    

    然后您可以在下面的脚本中使用相同的

    var Person = require("~/commonlogic").Person;
    

    ES6路

    ES6具有 export 关键字。所以你就这么做

    export function Person(lastName, firstName)
    {
       this.firstName = firstName;
       this.lastName = lastName;
    }
    

    导入也可以是ES5或ES6

    ES5如下

    var Person=require(“~/公共逻辑”)。人
    

    ES6如下所示

    import {Person} from '~/commonlogic';