当前位置: 首页 > 知识库问答 >
问题:

ES 6-使用类

商麒
2023-03-14

我正在学习ES6类的语法。我来自C#背景,所以如果我的术语不正确,我道歉。或者,如果我在做一些看起来很奇怪的事情。

我正在构建一个网络应用程序作为学习练习。它建立在节点和快递上。我有一些路线定义如下:

'use strict';

module.exports = function() {
    const app = this;

    app.use('/blog', function(req, res) {
        console.log('loading blog postings');        
        res.render('blog', {}); 
    });

    app.use('/', function(req, res) {
        console.log('looking up: ' + req.path);
        res.render('home', {});
    });
};

我试图在这些视图后面放置一些视图模型。因此,我有一个名为viewModels的目录。该目录包含以下文件:

index.js
blog.js
home.js

当前的文件可能不准确,如下所示:

指数js

'use strict';

module.exports = function() {
  const HomeViewModel = require('./home);
  const BlogViewModel = require('./blog);
};

博客js

export default class BlogViewModel {
    constructor() {
        this.title = 'My Blog';
    }
}

家js

export default class HomeViewModel {
    constructor() {
        this.title = 'Home';
    }
}

我的想法是,我可以使用索引。js作为定义我的包或名称空间的一种方式。然后,在我的路由代码中,我可以这样做:

'use strict';

module.exports = function() {
    const app = this;
    const ViewModels = require('../viewModels/index');

    app.use('/blog', function(req, res) {
        console.log('loading blog postings');
        let viewModel = new ViewModels.BlogViewModel();
        res.render('blog', viewModel); 
    });

    app.use('/', function(req, res) {
        console.log('looking up: ' + req.path);
        let viewModel = new ViewModels.HomeViewModel();
        res.render('home', viewModel);
    });
};

但是,当我尝试此操作时,会出现一些运行时错误,如“错误:找不到模块“../viewModels/index”。这意味着我没有正确设置模块。但是,看起来我是我做错了什么?

共有2个答案

姚新霁
2023-03-14

事实上,我不确定你想问什么。如果我回答错了,没关系。

首先,你得到错误的原因错误:找不到模块'.../viewModels/index'是因为你在那里放了两个点。它应该只是一个点意味着从这里开始。然而,我不确定这是否是问题所在。我想问你把路由代码放在哪里,但是我还没有评论的权限。(啊...堆栈溢出你开玩笑吧...(

其次,下面是在ES6中导出类的正确方法。

例如:

A类。js

'use strict';
//This module can be used within the class. However, you cannot use it in another file.
const AModule = require('AModule');
//The class name used here just for debug output.
module.exports = class AClass {
  constructor(startValue) {
    //Not like C#. JavaScript does not define private or public.
    this.value = startValue;
  }
  method(incValue) {
    this.value += incValue;
    AModule(); //Just show you can use this module within the class;
  }
}

main.js

'use strict';
//You need to put a ./ before the path if you are include another module made by yourself.
//You do not need it for a npm module.
const AClass = require('./AClass.js');
//Now you just required the class of the AClass, you still need to new one;
var aClass = new AClass(500);
//After new one, you can call its method.
aClass.method(30);
//You can access its property by a dot;
console.info(aClass.value); //530

这是在ES6中创建类的100%工作方式。

以下是详细的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

不管怎样,JavaScript中的类就像函数一样,函数的原型将是它的方法。-plhd--0/>(obj,参数)),然后将新对象的构造html" target="_blank">函数属性链接到所使用的函数。

module.exports=xxx就是让xxx成为这个模块的值。例如,如果你module.exports='Hello';console.info(需要('模块'));,你会得到Hello。

孔波
2023-03-14

你的索引。js文件不正确,您不能从那里导出ViewModels。将其更改为:

'use strict';

module.exports = {
  HomeViewModel: require('./home'),
  BlogViewModel: require('./blog')
};

和viewModels它对C#有好处,但对Node没有好处。js。在节点中,它应该只是模型,IMO。

更新:

节点。js并不完全支持所有ES6功能,尤其是新模块声明:https://nodejs.org/en/docs/es6/.应使用标准CommonJs模块声明导出函数:

'use strict';

class HomeViewModel {
  constructor() {
    this.title = 'Home';
  }
}

module.exports = HomeViewModel;
 类似资料:
  • 通常情况下你可以用纯JavaScript类定义一个组件: class Greeting extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } } 如果你不使用ES6,你可以使用React.createClass来定义: var Greeting = React.create

  • 问题内容: 静态对象是否可以与React中的ES6类一起使用? 当我这样做时,上面的东西给了我未定义的方法 问题答案: 仅适用于。只需将方法声明为静态类方法即可: 关于 您实际上是在对象上创建属性。该属性不会 神奇地 扩展您的组件。

  • 问题内容: 我的印象是分号在ES6中已过时。但是,我今天遇到了这个问题: 不起作用: 作品: 为什么在这里需要用分号?我应该何时使用? 问题答案: 没有分号[1,2,3,4,5,6]将被视为属性访问。JS非常好,我个人认为添加分号没什么大不了的,所以我会继续使用它们。

  • 我有一个安装了ReactJS的NetCore2应用程序。 null VS代码抛出一个错误,告诉我异步只适用于。ts文件。另外,如果我在任何其他函数中使用await,我将得到一个错误,比如。 据我所知,async/await不仅仅是TS...(或者我错了?)。 谢了!

  • 我正在尝试使用模块。导出以创建“全局”函数,我可以在React项目中使用该函数使用Axios进行API调用。 我已经尝试了以下... 这将返回错误…'未定义fetchApi没有未定义 我知道,通常你可以使用导出默认导入和导出组件,但我认为这不是必需的,如果使用module.export. 另外,如果我尝试像这样导入。。。 我得到以下错误...尝试导入错误:'.../.../.../utils/ap

  • 问题内容: 在花了一些时间学习React之后,我了解了创建组件的两个主要范例之间的区别。 我的问题是,什么时候应该使用哪个?为什么?一个人相对于另一个人的利益/取舍是什么? ES6课程: 功能性: 我认为只要没有状态可以由该组件操纵,功能就可以了,是吗? 我猜如果我使用任何生命周期方法,最好使用基于类的组件。 问题答案: 你有正确的主意。如果您的组件只做一些道具和渲染,那么功能就可以了。您可以将它

  • 在花了一些时间学习React之后,我理解了创建组件的两种主要模式之间的差异。 我的问题是什么时候我应该使用哪一个,为什么?一种方法与另一种方法相比有哪些好处/利弊? ES6类: 功能: 我认为只要没有状态可被该组件操纵,就可以正常工作,但就这样吗? 我想如果我使用任何生命周期方法,最好使用基于类的组件。

  • 问题内容: 我使用的是react-router,因此我将组件用于整个应用程序中的链接,在某些情况下,我需要根据用户输入动态生成链接,因此需要类似的内容 ,但无需刷新页面。 我发现了这个小笔记-(https://github.com/rackt/react- router/issues/835 )-我尝试使用,但是上下文有问题… 这导致我(https://github.com/rackt/react