nodejs下function,new function和this的研究

转:http://www.html5china.com/html5-article-3023-1.html


重点我都高亮了!

由于在使用nodejs之前接触js也比较少,最近一直被js的function和new function所困惑,由于两者都可以呈现出面向对象的样子,不知道两者的差别在哪里,就此问题做了一些研究。在研究的过程中发现this指针是个麻烦事,这在js前端使用的时候就已经体会到了,但是在node中的this又和前端js不太一样,也就此对node中的this做了下简单的研究。下面先分享一下对于function和new function的研究,主要是他们用于面向对象设计的方法和比较。

1. 首先,我们这里把function直接调用时将这个function当做方法来看待,而new function是将function当做类来看待。

2. 基于第一点,当把function作为类来使用时,function中的this下的变量都会变成实例化对象的可访问属性(可以理解为public,其实nodejs中的this就是用来定义类的公有变量的,关于this会在下面做进一步的解释),例如function A(){this.x = 1;},则var a = new A();后相当于得到var a = {x:1};this指向这里类生成的对象本身,this.x就相当于将x这个属性暴露出去,而原本function中没有this的都可以看做是私有变量,不能直接访问。

3. function当做方法来看时,即不new,则调用方法时的this指的是这个文件,我们称为文件对象。只有return的东西是可以被外部访问的,内部的数据则是被隐蔽的。

4. 结合2,3两点可以发现,无论是不是new,实际上都有对象的概念,即暴露一些公用方法和变量,隐藏一些私有属性,很多情况下两种设计方法都可以。

5. 对于继承,js中使用prototype来指定类型的原型,即function的原型对象。对于function当做方法来使用则需要将一些需要用到的原型的方法包在返回变量里。而当做类来使用则可以直接用.的形式来访问属性。从这点来说function当做类来表现面向对象的思想用起来要方便的多。

所以综上,如果是严格按照面向对象思想来设计程序,并且牵涉到继承或者大量的对象创建,则需要用到prototype,推荐将function当做类来使用。

ps:其实js的随意有时候是好处,有时候也不好,使用起来会混乱。所以例如function如果当做类时就不要写return了,而如果当做function来用,不要用this(从公有变量角度来说,呈现的效果是一样的,语法上不会有什么问题,但混起来使用会导致程序变得很乱)。

下面介绍一下this的使用,特别是在node下和前端js不同的地方:

nodejs中的this在某个对象中指向这个对象,在某个function中分两种情况:(1)直接调用function,指向文件对象。(2)new function则指向创建的对象。

浏览器端js的this不同,浏览器端js的this指向的统一是window对象,并且未声明的全局属性也都认为是window对象的属性。例如var a = 9;然后调用alert(this.a)得到的结果就是9,。而在node中,却得不到这样的结果。如果你这样写,var a = 9;console.log(this.a);那么你只能得到undefined。这是因为node中的this表明的是这个文件对象,而this.a并不是说文件内定义的默认属性a,而是这个文件可以被其他js文件访问的属性a。如果另一个js文件require了这个文件,便可以直接得到这个属性值,和exports的效果一样puncha:其实this === module.exports对象。例如:
//file1.js
this.x = 9;

//file2.js
var f1 = require(“./file1″);
console.log(f1.x);//得到结果9

所以综上,this在nodejs中的作用就是声明对象的共有变量,无论是new出来的对象还是类似var a = {}的对象又或者是整个文件对象。this的使用要时刻和对象的概念绑在一起,不然程序很容易出现问题

转载于:https://www.cnblogs.com/puncha/archive/2012/12/22/3877011.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React前端和Node.js后端之间使用WebSocket连接的方法如下: 1在Node.js服务器端安装websocket库: ```bash npm install websocket ``` 2.在Node.js服务器端创建WebSocket服务器: ```javascript const WebSocket = require('websocket').server; const http = require('http'); const server = http.createServer(function(request, response) { // 处理HTTP请求 }); server.listen(8080, function() { console.log((new Date()) + ' Server is listening on port 8080'); }); wsServer = new WebSocket({ httpServer: server }); // 处理WebSocket连接 wsServer.on('request', function(request) { const connection = request.accept(null, request.origin); console.log('WebSocket connection accepted.'); // 处理WebSocket消息 connection.on('message', function(message) { if (message.type === 'utf8') { console.log('Received Message: ' + message.utf8Data); connection.sendUTF('Hi this is WebSocket server!'); } }); // 处理WebSocket关闭 connection.on('close', function(reasonCode, description) { console.log('WebSocket connection closed.'); }); }); ``` 在此示例中,我们使用了Node.js的HTTP模块和WebSocket库。我们创建了一个HTTP服务器,并将WebSocket服务器绑定到该服务器上。当收到WebSocket连接请求时,我们将打印一条消息,当接收到WebSocket消息时,我们将回复一个消息。当WebSocket连接关闭时,我们将打印一条消息。 3.在React前端中使用WebSocket连接: ```javascript import React, { Component } from 'react'; import logo from './logo.svg'; import './App.css'; import WebSocket from 'websocket'; class App extends Component { constructor(props) { super(props); this.state = { message: '', ws: null }; } componentDidMount() { // 创建WebSocket连接 const ws = new WebSocket('ws://localhost:8080'); ws.onopen = () => { console.log('WebSocket Client Connected'); }; ws.onmessage = (message) => { console.log('Received:', message.data); this.setState({ message: message.data }); }; ws.onclose = () => { console.log('WebSocket closed'); }; this.setState({ ws }); } render() { return ( <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <h1 className="App-title">Welcome to React</h1> </header> <p className="App-intro"> {this.state.message} </p> </div> ); } } export default App; ``` 在React前端中,我们使用了WebSocket库来创建WebSocket连接。我们使用`componentDidMount`方法在组件挂载后创建WebSocket连接。当WebSocket连接打开时,我们将打印一条消息,当接收到WebSocket消息时,我们将更新组件状态以显示该消息。当WebSocket连接关闭时,我们将打印一条消息。 在React前端中,我们只需要提供WebSocket服务器的URL,即可建立WebSocket连接。在此示例中,我们将WebSocket服务器的URL设置为`ws://localhost:8080`,因为我们假设Node.js服务器运行在本地8080端口上。 以上是React前端和Node.js后端之间使用WebSocket连接的基本步骤,你可以根据自己的实际需求进行进一步的开发和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值