js内置对象有哪些(js new一个对象的过程)
大家好,今天小编来为大家解答js内置对象有哪些这个问题,js new一个对象的过程很多人还不知道,现在让我们一起来看看吧!
什么是“JS”的内置对象
字符串、数字、布尔值、undefined以及null都是原始类型(primitive)而非对象。而String,Number,Boolean,Object都是语言内置的对象(built-in object),可以通过各自的构造函数得到。
比如子啊JavaScript中,字符串是一个原始类型,他本身没有属性,当你对一个字符串属性运算得时候(如“somestring”.length),javascript引擎会将该字符串包装成一个对象,该对象是通过String构造函数得到的,也就是说“some string”.length实际上是(newString(“some string”)).length。
浅谈js中什么是封闭函数、闭包、内置对象
本篇文章给大家带来的内容是介绍js中什么是封闭函数、闭包、内置对象。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。
一、变量作用域
变量作用域指的是变量的作用范围,javascript中的变量分为全局变量和局部变量
1、全局变量:在函数之外定义的变量,为整个页面公用,函数的内部外部都可以访问。
2、局部变量:在函数内部定义的变量,只能在定义该变量的函数内部访问,外部无法访问。函数内部访问变量时,先在内部查找是否有此变量,如果有,就使用内部,如果没有,就去外部查找
二、封闭函数
封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。
1、一般函数的定义和执行函数
2、封闭函数的定义和执行:(function(){...})();还可以在函数定义前加上"~"或者"!"符号来定义匿名函数。
三、闭包
闭包就是函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回
1、闭包用途1:将一个变量长期驻扎在内存当中,可用于循环中存索引值
2、闭包用途2:私有变量计数器,外部无法访问,避免全局变量的污染
四、内置对象
1、document
比如说在商品详情页观看时,想去购买,这是会跳转到登录页面,登录成功后使用该方法跳转到商品详情页
document.referrer//获取上一个跳转页面的地址(需要服务器环境)
2、location
a、window.location.href//获取或者重定url地址
b、window.location.search//获取地址参数部分
c、window.location.hash//获取页面锚点或者哈希值
3、Math
a、Math.random获取0-1的随机值
b、Math.floor向下取整
c、Math.ceil向上取整
egg.js使用指南
官方教程有点跳跃,很多东西没讲清楚,不太适合小白理解,特此整理、归纳一下。
打开这篇博客的正确方式是:先读一遍官方教程,读不懂的可以略过,然后再带着问题来看这篇文章。然后再回去读官方文档,去理解。最终目的是理解官方文档,我的文章并不权威,只是起到帮助理解文档的作用。
答案:功能更丰富、更规范的koa
使用koa时,你要写一个项目,要往里面加很多中间件,要写脚本加载routes文件夹下面的所有路由以及model文件夹下面的所有sequelize模型,koa仅仅是一个骨架,其他的都是你来完成,自由度高,但集成度低,每创建一个新项目都要做很多重复工作。egg.js是封装了一套koa,可以理解成大礼包版koa,集成度高,可以轻松创建一个项目而不用做很多繁琐的初期工作,解放生产力,更可贵的是有一套现成的规范提供给我们,不需要我们自己再去探索一套规范,比如router放哪里,controller放哪里,需不需要service,哪些放在service等等。
根据egg.js目录结构先了解其项目规范,为了了解这些目录/文件是做什么,先从我们最熟悉的request讲起:
在进行下面的阅读前请保证已经理解了egg.js中的内置对象。
内置对象可以被方便地获取到,不过功能有限,我们可以通过egg.js的扩展(Extend)功能去进一步加强、定制框架的能力。
egg.js中有非常多新鲜的特性:“扩展”、“插件”、“多环境配置”,这些特性名称虽然不一样,但本质都是一样的:有则覆盖,无则增加。类似于 lodash中的defaults函数,也类似于继承。
因此,如果我们想扩展Application对象,根据egg.js规范,应该在projectDir/app/extend/下增加application.js:
以后就可以方便地调用 app.specialName获取这个值。
Extend特性可以扩展上层框架的内置对象,而插件则可以扩展除router和controller之外的整个app。插件拥有自己的package.json,因此可以独立发布到npm,每个人都可以install,享用你的扩展。
如果我要为项目写一个管理微信公众号的功能,我会写一个WxService:
很多项目都可以用到这个Service,因此我会提取为一个插件,然后通过引入插件的形式去引入,我在应用中同样可以调用这个Service,等于是把插件中的文件往应用中复制了一份,和写在应用中没什么两样。
关于如何提取插件,请参见:渐进式开发
定制自己的框架可以确定项目的技术选型、减少项目初期的工作,定制框架的思想其实和扩展内置对象、开插件是一样的,但是前置工作会比较多一些,参见: egg.js框架开发。
这些前置工作比较重复、有固定格式,没有必要自己写,建议用骨架搭建。
当我们基于自己定制的框架framework1,并且在应用中依赖了插件plugin2、plugin3,开发了一个应用:
其中framework1直接基于egg并且内置了plugin1,此时整个app的加载顺序是怎样的呢?
加载原则总结一句话是:从被依赖到依赖。
先来分析一下,谁被依赖,谁依赖:
为了最大程度利用多核、增强Node进程健壮性,一般我们会使用PM2一类的工具,如果使用egg.js,就完全不需要担心了,egg利用cluster模块(了解cluster原理请看这篇文章)已经创建了一个非常稳定的多进程模型。
关于本次js内置对象有哪些和js new一个对象的过程的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。