node.js学习笔记(四)module系统和node中的深拷贝、浅拷贝

文章目录

  • 复习
  • node中的模块系统
    • CommonJS模块规划
    • 导出成员
  • exports和module.exports
  • node中的浅拷贝和深拷贝
      • 深拷贝和浅拷贝的区别
  • 源代码

复习

状态码设置
301-永久重定向,定义浏览器行为,从缓存中读取,加速浏览速度
302-临时重定向,浏览器会通信服务器,请求url

node中的模块系统

node包括什么?
·ecmascript语言
·核心模块
·第三方模块
·自己写的模块
什么是模块化?
·文件作用域
·通信规则(加载和导出)

CommonJS模块规划

·Node中拥有模块系统,是模块作用域,默认所有成员不能被外部访问
·使用require方法加载模块
·使用exports接口对象用于导出模块中的成员

var X=require ('module')

执行被加载模块中的代码

导出成员

导出多个成员(必须在对象中)
导出一个成员(module.exports=‘hello’)
或者可以{}包裹多个对象

exports和module.exports

在node中对象赋值相当于指向同一内存空间

var obj={}
var obj1=obj
obj1.foo='bar'
//这时候obj中也会出现foo这个变量
obj1={}
obj1.foo='world'
//这时候相当于给obj1重新分配内存空间,不再相互关联

node中的浅拷贝和深拷贝

和java中是一样的

深拷贝和浅拷贝的区别

1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”

源代码

main.js

var fooExports=require('./foo')

console.log(fooExports)
//这样默认的得到的是对象 

foo.js

var foo='bar'

function add(x,y){
    return x+y
}
exports.add=add
//相当于返回了export
//不能 exports=add 会返回空对象
//如果想要直接导出某个成员,必须使用下面的方式:
module.exports='hello'
//在node中,每个模块内部都有一个自己module对象
//该module对象中有一个成员exports,缺省值是空\
//也就是说,如果你需要对外导出成员,只需要把成员挂载到module.exports中

//我们发现,每次导出接口成员,通过module.exports.add很麻烦,所以为了简化操作,专门提供了一个变量
//var exports=module.exports
var module={
    exports:{
        foo:'bar'
        add:function(x,y){
            return x+y
        }
    }
}
exports.foo='bar'
module.exports.add=function(x,y){
    return x+y
}//可以去掉module
//谁来require我,谁就得到这个module.exports对象
//默认在代码的最后有一句:
return module.exports


//不能出现这种语句:
exports="hello"
//这相当于对exports重新赋值,指向了新的内存空间,不能够在外部引用
//想要返回,要这样做:
module.exports="hello"
//此时:
exports='world'
//不会被返回,很简单的道理

//这是可以的:
exports.a=123

//如果你实在分不清module.exports与exports,你可以选择忘记exports只用module.exports

你可能感兴趣的:(#,node.js)