`
deng131
  • 浏览: 660038 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SpiderMonkey实现Javascript 脚本引擎

阅读更多
SpiderMonkey作为 Javascript 脚本引擎,一般用来嵌入其他语言中。同时还有google v8.
http://www.aoeex.com/personal/2006/06/07/coding_with_spidermonkey.php

可以要让程序带有脚本控制功能,最经典的就是 Office的VBA了。
What SpiderMonkey does

The JavaScript engine compiles and executes scripts containing JavaScript statements and functions. The engine handles memory allocation for the objects needed to execute scripts, and it cleans up—garbage collects—objects it no longer needs.

编译器只是执行脚本,分配内存,回收内存垃圾。

The word JavaScript may bring to mind features such as event handlers (like onclick), DOM objects, window.open, and XMLHttpRequest. But in Mozilla, all of these features are actually provided by other components, not the SpiderMonkey engine itself. SpiderMonkey provides a few core JavaScript data types—numbers, strings, Arrays, Objects, and so on—and a few methods, such as Array.push. It also makes it easy for each application to expose some of its own objects and functions to JavaScript code. Browsers expose DOM objects. Your application will expose objects that are relevant for the kind of scripts you want to write. It is up to the application developer to decide what objects and methods are exposed to scripts.

在这里,要把Javascript 与其他组件分开来看。SpiderMonkey只是一个引擎,提供一些很少的功能。浏览器的dom ,windows,xmlhttprequest是由浏览器其他组件提供的功能。这样有利于程序暴露自已的对象。比如浏览器的DOM 。那写程序的时候就编写自己希望脚本控制的对象。但是,JavaScript是一种弱类型语言,数据类型怎么转换过去呢?

------------------------------------------------------------------------------------------------------------------------------------------

在SpiderMonkey的使用当中,最重要的要有3个元素:JSRuntime,JSContext,还要有一个全局对象 global object.

Runtimes. 通常一个程序只会存在一个runtime.所有的变量,对象,脚本还有context都只会存放在runtime里。

Contexts. 有点像线程,可以执行程序,获取变量,调用函数,但是不同的是这些并不是绑定在一起的。几乎所有的JSAPI函数都需要一个JSContext *作为第一个参数。

A JSContext, or context, is like a little machine that can do many things involving JavaScript code and objects. It can compile and execute scripts, get and set object properties, call JavaScript functions, convert JavaScript data from one type to another, create objects, and so on. Almost all JSAPI functions require a JSContext * as the first argument, just like most <stdio.h> functions require a FILE *.

There is a close association between contexts and threads. Simple, single-threaded applications can use a single context for everything. But each context can only do one thing at a time, so in a multithreaded application, only one thread at a time should use any given context. Such an application typically has one context per thread. JavaScript objects, on the other hand, are not permanently associated with the script, thread, or context that created them. They can be shared among many scripts or even many threads, as shown in the figure below.



Global objects. Lastly, the global object contains all the classes, functions, and variables that are available for JavaScript code to use. Whenever JavaScript code does something like window.open("http://www.mozilla.org/"), it is accessing a global property, in this case window. JSAPI applications have full control over what global properties scripts can see. The application starts out by creating an object and populating it with the standard JavaScript classes, like Array and Object. Then it adds whatever custom classes, functions, and variables (like window) the application wants to provide; see Custom objects below. Each time the application runs a JS script (using, for example, JS_EvaluateScript), it provides the global object for that script to use. As the script runs, it can create global functions and variables of its own. All of these functions, classes, and variables are stored as properties of the global object.
分享到:
评论

相关推荐

    spidermonkey31.2.0开发包

    SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎。这是编译好的,直接可以用,是截止2015/1/28最新的稳定版31.2.0。

    spidermonkey-让你的c程序支持javascript脚本.docx

    spidermonkey-让你的c程序支持javascript脚本.docx

    spidermonkey-ios:Game Closure修改了最新的Mozilla SpiderMonkey JavaScript引擎

    Mozilla SpiderMonkey是JavaScript的解释器和JIT(即时)编译器。 Apple不允许在App Store上自行修改应用程序代码,因此Game Closure SDK基于SpiderMonkey的解释器模式,而不是更快的IonMonkey引擎。 我们在构建...

    js-analysis:使用SpiderMonkey协助JavaScript恶意软件分析的脚本

    实现简单的DOM / WScript / ActiveX / PDF对象和功能,以帮助使用SpiderMonkey进行JavaScript恶意软件分析。 版本 0.5 例子 js -f redefine.js -f malware.js -i 使用“ dump()”命令显示所有全局键/值。 笔记...

    funfuzz:测试线中的模糊器集合,用于测试SpiderMonkey JavaScript引擎

    测试JavaScript引擎并可以在JavaScript shell中运行,compare_jit使用不同的标志比较SpiderMonkey的输出,而randorderfuzz将来自mozilla-central目录的随机测试放入生成的jsfunfuzz输出中。 除测试用例生成之外的...

    es_runtime:这是Spidermonkey javascript引擎的除锈包装,它使用了mozjs项目

    使用的引擎是Mozilla SpiderMonkey引擎( )。 这个项目起初是我学习防锈的业余爱好项目。我希望你们中的一些人发现对从锈病中使用蜘蛛猴很有帮助。 状态 尚无生产准备就绪,未经测试... 从0.2.0版开始,它可与最新...

    SpiderMonkeyIRC-开源

    SpiderMonkeyIRC是一个用C编写的IRC客户端/机器人,带有嵌入式SpiderMonkey(JavaScript)脚本引擎。

    javaScript核心原理

    ECMAScript是一门高度抽象的面向对象(object-oriented)...不过一般来说,我们会使用__&lt;内部属性名&gt;__ 下划线来代替双括号,例如__proto__(这是某些脚本引擎比如SpiderMonkey的对于原型概念的具体实现,尽管并非标准)。

    Playlist-Tools-SMP:用于 foobar2000 的 Spider Monkey 工具集

    一组用于的脚本,内置于菜单中,用作“使用示例”的中心和最需要的 foobar 缺失功能的快捷方式:按标签删除重复项、恢复死项目、检查标签上的错误、发现- 像播放列表创建、高级查询等。 特征 不可能提供可以使用...

    javascript:无法储存Javascript

    JavaScript JavaScript和客户端编程语言。 Los programas是JavaScript的lalamados脚本。 Dichos脚本不需要任何必要的必要的准备... SpiderMonkey -Firefox。 历史 JavaScript的FUE inventado POR布兰登·艾克EN 1995

    微软开源 JavaScript 引擎 ChakraCore-易语言

    mozilla spider monkey,老牌的js引擎,编译后大小合适,很适合使用 ms chakra core,最新的js引擎,支持es6标准,编译后最小,速度很快,我个人蛮喜欢的 苹果的webkit中的javascript core引擎,没编译过,但是感觉...

    TurboSphere:TurboSphere 游戏引擎

    TurboSphere 有一个快速可靠的 JavaScript 引擎 SpiderMonkey,它提供了 Web 应用程序所具有的所有脚本功能。 然而,Sphere 系列游戏引擎与基于 Web 的开发在几个关键方面有所不同: 事件循环暴露给脚本 公开对音频...

    北京java笔试题-cpgf:cpgf库

    SpiderMonkey JavaScript 绑定到 C++ 的脚本绑定引擎。 它基于反射库。 cpgf 回调——一个回调库,用于在 C++ 中实现信号/槽或回调。 它是其他图书馆的主要图书馆。 cpgf 元数据集合——具有内置元数据支持的库。 ...

    Cocos2D-X游戏开发技术精解

    13.6.2 SpiderMonkey 362 13.6.3 示例程序 363 13.7 本章小结 364 第14章 引擎之外的附加功能 366 14.1 概述 366 14.2 网络通讯支持 367 14.2.1 HTTP介绍 367 14.2.2 curl库(libcurl) 368 14.2.3 HTTP在...

    ofx[removed]Openframeworks 插件

    ofxJavascript 是 openframeworks 的一个插件,它允许应用程序使用 Mozilla “Spidermonkey”引擎 ( ) 嵌入和执行 Javascript。 它最初是在 2009 年 8 月开发的,从那时起并没有真正发展,尽管它被用于最近的脚本...

    ngx_http_js_module:nginx javascript模块

    如果您不完全了解基于同步和异步原理的应用程序之间的区别,请首先阅读 而且SpiderMonkey没有任何图书馆。 而且没有人期望使用这种语言。 更重要的是,浏览器界面也是异步的和基于事件的。 因此,我们可以放松身心...

    Flusspferd-开源

    C ++的Javascript绑定,C ++是Javascript解释器/外壳和Javascript / C ++模块系统。 它包括一些Javascript类和模块。 它支持在C ++中轻松嵌入Java脚本,反之亦然。 当前支持的引擎是Spidermonkey。

Global site tag (gtag.js) - Google Analytics