this.prototype[name]=func
return this
}
String.method('trim',function(){
if('trim' in this){
return this.trim)
}else{
return this.replace(/^\s+|\s+$/g,'')
}
})
上面的代码为Function原型提供了一个method方法,通过它可以为原型添加新的方法
为String原型添加一个trim方法原意为当调用对象或上下文存在trim属性的话,就调用原来的trim方法,否则就调用replace方法
看了一段时间关于js原型的知识 js的扩展方法是基于原型的 如Array prototype XXXX就是给Array扩展XXX方法 然后数组都能使用这个方法了
在对象数组里面经常有根据属性来进行排序的 升序 降序的 于是自己就想写一个类似于C#里面的orderBy的方法 代码如下
代码如下:
Array prototype OrderByAsc = function (func) {
var m = {}
for (var i = i <this lengthi++) {
for (var k = k <this lengthk++) {
if (func(this[i]) <func(this[k])) {
m = this[k]
this[k] = this[i]
this[i] = m
}
}
}
return this
}
Array prototype OrderByDesc = function (func) {
var m = {}
for (var i = i <this lengthi++) {
for (var k = k <this lengthk++) {
if (func(this[i]) >func(this[k])) {
m = this[k]
this[k] = this[i]
this[i] = m
}
}
}
return this
}
调用的方法如下
代码如下:
var arr = [{ name: aaa grade: } { name: ccc grade: } { name: bbb grade: }]
var orderArr = arr OrderByDesc(function (a) {
return a grade
})
然后输出一下 看一下结果吧
代码如下:
for (var i = i <orderArr lengthi++) {
document write(orderArr[i] name)
lishixinzhi/Article/program/Java/JSP/201311/19823一、编写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你的类是如何创建的,和它将包含什么方法: