nodejs函数扩展

JavaScript018

nodejs函数扩展,第1张

1、函数参数默认值

es6版本以前,不能直接为函数的参数指定默认值,只能采用变通的方法。

Es6允许可以直接设置默认参数,可以直接写在定义参数后面

下面介绍全页面刷新方法:有时候可能会用到

window.location.reload()刷新当前页面.

parent.location.reload()刷新父亲对象(用于框架)

opener.location.reload()刷新父窗口对象(用于单开窗口)

top.location.reload()刷新最顶端对象(用于多开窗口)

下面再介绍一些javascript基本函数 

1.document.write(”")为 输出语句 

2.js中的注释为// 

3.传统的html文档顺序是:document->html->(head,body) 

4.一个浏览器窗口中的dom顺序是:window->(navigator,screen,history,location,document) 

5.得到表单中元素的名称和值:document.getelementbyid(”表单中元素的id号”).name(或value) 

6.一个小写转大写的js: document.getelementbyid(”output”).value = document.getelementbyid (”input”).value.touppercase() 

7.js中的值类型:string,number,boolean,null,object,function 

8.js中的字符型转换成数值型:parseint(),parsefloat() 

9.js中的数字转换成字符型:(”"+变量) 

10.js中的取字符串长度是:(length) 

11.js中的字符与字符相连接使用+号. 

12.js中的比较操作符有:==等于,!=不等于,>,>=,<.<= 

13.js中声明变量使用:var来进行声明 

14.js中的判断语句结构:if(condition){}else{} 

15.js中的循环结构:for([initial expression][condition][upadte expression]) {inside loop} 

16.循环中止的命令是:break 

17.js中的函数定义:function functionname([parameter],…){statement[s]} 

18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替. 

19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self 

20.状态栏的设置:window.status=”字符” 

21.弹出提示信息:window.alert(”字符”) 

22.弹出确认框:window.confirm() 

23.弹出输入提示框:window.prompt() 

24.指定当前显示链接的位置:window.location.href=”url” 

25.取出窗体中的所有表单的数量:document.forms.length 

26.关闭文档的输出流:document.close() 

27.字符串追加连接符:+= 

28.创建一个文档元素:document.createelement(),document.createtextnode() 

29.得到元素的方法:document.getelementbyid() 

49.引用一个文件式的js: 

50.指定在不支持脚本的浏览器显示的html: 

51.当超链和onclick事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例: dfsadf  

52.js 的内建对象 有:array,boolean,date,error,evalerror,function,math,number,object,rangeerror,referenceerror,regexp,string,syntaxerror,typeerror,urierror 

53.js中的换行:/n 

54.窗口全屏大小:function fullscreen(){ this.moveto(0,0)this.outerwidth=screen.availwidththis.outerheight=screen.availheight}window.maximize=fullscreen 

55.js中的all代表其下层的全部元素 

56.js中的焦点顺序:document.getelementbyid(”表单元素”).tabindex = 1 

 57.innerhtml的值是表单元素的值:如how are you,则innerhtml的值就是:how are you

58.innertext的值和上面的一样,只不过不会把em这种标记显示出来. 

59.contenteditable可设置元素是否可被修改,iscontenteditable返回是否可修改的状态. 

60.isdisabled判断是否为禁止状态.disabled设置禁止状态 

61.length取得长度,返回整型数值 

62.addbehavior()是一种js调用的外部函数文件其扩展名为.htc 

63.window.focus()使当前的窗口在所有窗口之前. 

64.blur()指失去焦点.与focus()相反. 

65.select()指元素为选中状态. 

66.防止用户对文本框中输入文本:onfocus=”this.blur()” 

67.取出该元素在页面中出现的数量:document.all.tags(”div(或其它html标记符)”).length 

68.js中分为两种窗体输出:模态和非模态.window.showmodaldialog(),window.showmodeless() 

69.状态栏文字的设置:window.status=‘文字’,默认的状态栏文字设置:window.defaultstatus = ‘文字.’ 

70.添加到收藏夹:external.addfavorite(”http://www.google.com”,”google”) 

71.js中遇到脚本错误时不做任何操作:window.onerror = donothing指定错误句柄的语法为:window.onerror = handleerror 

72.js中指定当前打开窗口的父窗口:window.opener,支持opener.opener…的多重继续. 

73.js中的self指的是当前的窗口 

74.js中状态栏显示内容:window.status=”内容” 

75.js中的top指的是框架集中最顶层的框架 

76.js中关闭当前的窗口:window.close() 

77.js中提出是否确认的框:if(confirm(”are you sure?”)){alert(”ok”)}else{alert(”not ok”)} 

78.js中的窗口重定向:window.navigate(”http://www.google.com”) 

79.js中的打印:window.print() 

80.js中的提示输入框:window.prompt(”message”,”defaultreply”) 

81.js中的窗口滚动条:window.scroll(x,y) 

82.js中的窗口滚动到位置:window.scrollby 

83.js中设置时间间隔:setinterval(”expr”,msecdelay)或setinterval(funcref,msecdelay)或settimeout 

84.js中的模态显示在ie4+行,在nn中不行:showmodaldialog(”url”[,arguments][,features]) 

85.js中的退出之前使用的句柄:function verifyclose(){event.returnvalue=”we really like you and hope you will stay longer.”}}   window.onbeforeunload=verifyclose 

86.当窗体第一次调用时使用的文件句柄:onload() 

87.当窗体关闭时调用的文件句柄:onunload() 

88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname(”/a/a.html”),hash(”#giantgizmo”,指跳转到相应的锚记),href(全部的信息) 

89.window.location.reload()刷新当前页面. 

89-1.parent.location.reload()刷新父亲对象(用于框架) 

89-2.opener.location.reload()刷新父窗口对象(用于单开窗口) 

89-3.top.location.reload()刷新最顶端对象(用于多开窗口) 

90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的url) 

91.document.write()不换行的输出,document.writeln()换行输出 

92.document.body.nowrap=true防止链接文字折行. 

93.变量名.charat(第几位),取该变量的第几位的字符. 

94.”abc”.charcodeat(第几个),返回第几个字符的ascii码值. 

95.字符串连接:string.concat(string2),或用+=进行连接 

96.变量.indexof(”字符”,起始位置),返回第一个出现的位置(从0开始计算) 

97.string.lastindexof(searchstring[,startindex])最后一次出现的位置. 

98.string.match(regexpression),判断字符是否匹配. 

99.string.replace(regexpression,replacestring)替换现有字符串. 

100.string.split(分隔符)返回一个数组存储值. 

101.string.substr(start[,length])取从第几位到指定长度的字符串. 

102.string.tolowercase()使字符串全部变为小写. 

103.string.touppercase()使全部字符变为大写. 

104.parseint(string[,radix(代表进制)])强制转换成整型. 

105.parsefloat(string[,radix])强制转换成浮点型. 

106.isnan(变量):测试是否为数值型. 

107.定义常量的关键字:const,定义变量的关键字:var 

一、编写Node.js原生扩展

Node.js是一个强大的平台,理想状态下一切都都可以用javascript写成。然而,你可能还会用到许多遗留的库和系统,这样的话使用c++编写Node.JS扩展会是一个不错的注意。

以下所有例子的源代码可在node扩展示例中找到 。

编写Node.js C + +扩展很大程度上就像是写V8的扩展; Node.js增加了一些接口,但大部分时间你都是在使原始的V8数据类型和方法,为了理解以下的代码,你必须首先阅读V8引擎嵌入指南。

Javascript版本的Hello World

在讲解C++版本的例子之前,先让我们来看看在Node.js中用Javascript编写的等价模块是什么样子。这是一个最简单的Hello World,也不是通过HTTP,但它展示了node模块的结构,而其接口也和大多数C++扩展要提供的接口差不多:

HelloWorldJs = function() {

this.m_count = 0

}

HelloWorldJs.prototype.hello = function()

{

this.m_count++

return “Hello World”

}

exports.HelloWorldJs = HelloWorldJs

正如你所看到的,它使用prototype为HelloWorldJs类创建了一个新的方法。请注意,上述代码通过将HelloWorldJS添加到exports变量来暴露构造函数。

要在其他地方使用该模块,请使用如下代码:

var helloworld = require(‘helloworld_js’)

var hi = new helloworld.HelloWorldJs()

console.log(hi.hello())// prints “Hello World” to stdout

C++版本的Hello World

要开始编写C++扩展,首先要能够编译Node.js(请注意,我们使用的是Node.js 2.0版本)。本文所讲内容应该兼容所有未来的0.2.x版本。一旦编译安装完node,编译模块就不在需要额外的东西了。

完整的源代码可以在这里找到 。在使用Node.js或V8之前,我们需要包括相关的头文件:

#include <v8.h>

#include <node.h>

using namespace node

using namespace v8

在本例子中我直接使用了V8和node的命名空间,使代码更易于阅读。虽然这种用法和谷歌的自己的C++编程风格指南相悖,但由于你需要不停的使用V8定义的类型,所以目前为止的大多数node的扩展仍然使用了V8的命名空间。

接下来,声明HelloWorld类。它继承自node::ObjectWrap类 ,这个类提供了几个如引用计数、在V8内部传递contex等的实用功能。一般来说,所有对象应该继承ObjectWrap:

class HelloWorld: ObjectWrap

{

private:

int m_count

public:

声明类之后,我们定义了一个静态成员函数,用来初始化对象并将其导入Node.js提供的target对象中。设个函数基本上是告诉Node.js和V8你的类是如何创建的,和它将包含什么方法: