欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c到j(luò)avascript的簡(jiǎn)單介紹

有c語(yǔ)言基礎(chǔ)想學(xué)JavaScript從哪里入門(mén) 求書(shū)籍推薦

JavaScript權(quán)威指南(注重基礎(chǔ)理論知識(shí))和JavaScript高級(jí)程序設(shè)計(jì)(側(cè)重實(shí)例),兩本書(shū)都很重要啊。都是外國(guó)人寫(xiě)的,如果英語(yǔ)基礎(chǔ)好,最好看原版,否則就將就著看翻譯版吧。國(guó)人寫(xiě)的就不要看了,浪費(fèi)時(shí)間。運(yùn)行Javascript的工具就是瀏覽器,不需要額外安裝軟件。

成都創(chuàng)新互聯(lián)是專業(yè)的桐梓網(wǎng)站建設(shè)公司,桐梓接單;提供成都網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行桐梓網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

學(xué)習(xí)javascript需要先學(xué)C語(yǔ)言嗎?

學(xué)javascript的話確實(shí)有C語(yǔ)言基礎(chǔ)比較好,因?yàn)閖avascript從C-minus發(fā)展到ECMAscript,最終才是javascript,但是javascript的難點(diǎn)不在它的語(yǔ)法上,而是在他的瀏覽器兼容性上,這點(diǎn)是萬(wàn)惡的微軟搞出來(lái)的。javascript和C的難點(diǎn)是不一致的,所以沒(méi)必要去學(xué)C語(yǔ)言。javascript要記住的東西非常多,而且條例不是很清楚,一般感覺(jué)比C語(yǔ)言用起來(lái)還麻煩。

既然做web前端的話,美工比javascript重要的多,畢竟有時(shí)候前端代碼都有現(xiàn)成的模板可以使用。相比之下javascript很多代碼都是通過(guò)后臺(tái)腳本直接嵌入到html頁(yè)面中的,比如Ajax代碼等。所以前端的話,初期只要會(huì)dom編程即可,能看懂框架代碼,慢慢理解就是了。

最難的部分是CSS,布局這點(diǎn)比javascript難的多,瀏覽器兼容性更令人傷心,畢竟javascript還有jquery等框架可以使用,但是css就沒(méi)這么幸運(yùn)了,除了某些css屬性可以通過(guò)jquery等框架屏蔽兼容之外,必須要手動(dòng)調(diào)試。

反正到最后你都必須精通HTML+CSS+javascript,內(nèi)容很少,但是很雜論,作為吃飯的工具,你不得不精通。甚至到最后你還得回后臺(tái)代碼才行比如,PHP 、java、C#等,因?yàn)閱螁问亲銮岸说暮苌俚模蟛糠止径际腔旌锨昂笈_(tái)的,除了某些大公司,專門(mén)找美術(shù)專業(yè)的做前臺(tái)設(shè)計(jì)。

如何將c++綁定至javascript

下載綁定生成器,本機(jī)路徑/Users/iven/Dev/bindings-generator

為了在Mac OS X中安裝運(yùn)行MacPort端口,系統(tǒng)必須要已經(jīng)安裝蘋(píng)果的“Command Line Developer Tools”(命令行開(kāi)發(fā)者工具)。Xcode 4及以后版本的用戶首先需要通過(guò)啟動(dòng)或運(yùn)行Xcode接受Xcode EULA。

xcodebuild -license

下載安裝MacPort

注意:如果是Homebrew用戶,應(yīng)該先卸載Homebrew。因?yàn)镠omebrew不兼容MacPort。

同時(shí)執(zhí)行MacPort的“selfupdate”命令以確保安裝最新的發(fā)布版本。

sudo port -v selfupdate

當(dāng)更新完成之后,使用MacPort在命令行中安裝python依賴(dependencies)

sudo port install python27 py27-yaml py27-cheetah

你會(huì)看到如下所示:

下載llvm-3.3,解壓至$HOME/bin目錄。如果沒(méi)有bin目錄,請(qǐng)創(chuàng)建一個(gè)bin目錄,將未解壓的ZIP壓縮包重命名為“clang+llvm-3.3”。

最后目錄如下所示:/Users/guanghui/bin/clang+llvm-3.3(guanhui是本機(jī)的主目錄名字)

樣本代碼

綁定生成器資源庫(kù)中包括一個(gè)樣本測(cè)試用例。打開(kāi)bindings-generator/test/simple_test文件夾。

配置

根據(jù)自己的環(huán)境個(gè)性化設(shè)置“test/userconf.ini”和“test/user.cfg”文件。

注意:應(yīng)該移除后綴為“.sample”的文件如“user.cfg.sample”和“userconf.ini.sample”

[DEFAULT]

androidndkdir=/Users/iven/Dev/android-ndk-r8c

clangllvmdir=/Users/iven/Dev/clang+llvm-3.1-x86_64-apple-darwin11

cxxgeneratordir=/Users/iven/Dev/bindings-generator-master

user.cfg配置如下所示

PYTHON_BIN=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/ python2.7

運(yùn)行測(cè)試樣本

./test.sh

如果環(huán)境設(shè)置正確,你會(huì)看到如下所示:

Errors in parsing headers:

1. severity = Warning,

location =SourceLocation file None, line 0, column 0,

details = "argument unusedduring compilation: '-nostdinc++'"

不用擔(dān)心這個(gè)警告,你已完成運(yùn)行,測(cè)試用例會(huì)創(chuàng)建一個(gè)包含3個(gè)文件的“simple_test_bindings”目錄。

一個(gè)綁定類的.hpp頭文件

一個(gè)實(shí)現(xiàn)綁定類的.cpp文件

一個(gè)介紹如何(從Java腳本)調(diào)用C++類暴露方法的.js文件。

運(yùn)行測(cè)試

Create a JS base Cocos2d-x project. 創(chuàng)建基于JS的Cocos2d-x項(xiàng)目

將“simple_Test folder”文件夾和“simple_test_binding”文件夾添加到項(xiàng)目中

修改“autogentestbindings.cpp”中的注冊(cè)函數(shù)如下:

void register_all_autogentestbindings(JSContext* cx, JSObject* obj) {

jsval nsval;

JSObject *ns;

JS_GetProperty(cx, obj, "ts",nsval);

if (nsval == JSVAL_VOID) {

ns = JS_NewObject(cx, NULL, NULL, NULL);

nsval = OBJECT_TO_JSVAL(ns);

JS_SetProperty(cx, obj, "ts",nsval);

} else {

JS_ValueToObject(cx,nsval, ns);

}

obj = ns;

js_register_autogentestbindings_SimpleNativeClass(cx, obj);

}

注意:如果你將“ts”添加到“test.ini”文件中的“target_namespace”變量里,便會(huì)自動(dòng)生成代碼。無(wú)需修改。

target_namespace =ts

在“AppDelegate”中注冊(cè)

包含頭文件“autogentestbindings.hpp”然后注冊(cè)回調(diào)函數(shù):

sc-addRegisterCallback(register_all_autogentestbindings);

在“hello.js”文件適當(dāng)?shù)胤皆黾右韵麓a。本機(jī)將“init f”函數(shù)放在第一個(gè)場(chǎng)景。

var myClass=new ts.SimpleNativeClass();

var myStr=myClass.returnsACString();

var label = cc.LabelTTF.create(myStr, "Helvetica", 20.0);

限制

綁定生成器存在以下兩個(gè)限制

自變量數(shù)字參數(shù)無(wú)法工作,所以需要手動(dòng)編寫(xiě)包裝器

代表類無(wú)法工作,所以需要手動(dòng)綁定,詳見(jiàn)下一部分。

手動(dòng) JSB 綁定

本指南將介紹利用Cocos2d-x 2.14模板如何在自己的項(xiàng)目中實(shí)現(xiàn)JSB綁定。

首先用Cocos2d-js模板創(chuàng)建項(xiàng)目。其次,我們會(huì)介紹如何一步一步從JS調(diào)用本地函數(shù)。最后你便會(huì)學(xué)會(huì)如何從本地代碼調(diào)用JS代碼了。

現(xiàn)在讓我們開(kāi)始!本機(jī)使用的Mac OS X作為開(kāi)發(fā)環(huán)境。

步驟1. 用Cocos2dx-js模板創(chuàng)建新項(xiàng)目,同時(shí)新建一個(gè)即將綁定至JS的C++類。

將項(xiàng)目命名為“JSBinding”然后點(diǎn)擊“Next”、“ Create”

新建一個(gè)類然后實(shí)現(xiàn)這個(gè)類,等會(huì)再將其綁定至JS。

按“command+N”新建一個(gè)C++類并命名為“JSBinding”,路徑為“OS X\C and C++\C++ Class”。

將以下代碼添加到“JSBinding.h”文件中。

#include "cocos2d.h"

#include "ScriptingCore.h"

// Define a namespace to manage your code and make your code clearly

namespace JSB {

class JSBinding: public cocos2d::CCObject

{

public:

static cocos2d::CCScene* scene();

virtual bool init();

CREATE_FUNC(JSBinding);

void functionTest();

};

}

現(xiàn)在實(shí)現(xiàn)JSBinding.cpp中的類。如下所示:

bool JSB::JSBinding::init(){

bool bRef = false;

do{

cocos2d::CCLog("JSB init...");

bRef = true;

} while (0);

return bRef;

}

void JSB::JSBinding::functionTest(){

cocos2d::CCLog("Function test...");

}

步驟2. 將C++代碼綁定至Java腳本代碼

按“command+N”新建C++類,然后命名“JSB_AUTO”路徑“OS X\C and C++\C++ Class”。

往“JSB_AUTO.h”文件中增加一些代碼

#include "jsapi.h"

#include "jsfriendapi.h"

#include "ScriptingCore.h"

#include "JSBinding.h"

void register_all(JSContext* cx, JSObject* obj);

然后注意“JSB_AUTO.cpp”的實(shí)現(xiàn)。

#include "jsapi.h"

#include "jsfriendapi.h"

#include "ScriptingCore.h"

#include "JSBinding.h"

void register_all(JSContext* cx, JSObject* obj);

然后注意“JSB_AUTO.cpp”的實(shí)現(xiàn)。

#include "cocos2d.h"

#include "cocos2d_specifics.hpp"

// Binding specific object by defining JSClass

JSClass* jsb_class;

JSObject* jsb_prototype;

// This function is mapping the function “functionTest” in “JSBinding.cpp”

JSBool js_functionTest(JSContext* cx, uint32_t argc, jsval* vp){

JSBool ok = JS_TRUE;

JSObject* obj = NULL;

JSB::JSBinding* cobj = NULL;

obj = JS_THIS_OBJECT(cx, vp);

js_proxy_t* proxy = jsb_get_js_proxy(obj);

cobj = (JSB::JSBinding* )(proxy ? proxy-ptr : NULL);

JSB_PRECONDITION2(cobj, cx, JS_FALSE, "Invalid Native Object");

if (argc == 0) {

cobj-functionTest();

JS_SET_RVAL(cx, vp, JSVAL_VOID);

return ok;

}

JS_ReportError(cx, "Wrong number of arguments");

return JS_FALSE;

}

JSBool js_constructor(JSContext* cx, uint32_t argc, jsval* vp){

cocos2d::CCLog("JS Constructor...");

if (argc == 0) {

JSB::JSBinding* cobj = new JSB::JSBinding();

cocos2d::CCObject* ccobj = dynamic_castcocos2d::CCObject*(cobj);

if (ccobj) {

ccobj-autorelease();

}

TypeTestJSB::JSBinding t;

js_type_class_t* typeClass;

uint32_t typeId = t.s_id();

HASH_FIND_INT(_js_global_type_ht, typeId, typeClass);

assert(typeClass);

JSObject* obj = JS_NewObject(cx, typeClass-jsclass, typeClass-proto, typeClass-parentProto);

JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));

js_proxy_t* p = jsb_new_proxy(cobj, obj);

JS_AddNamedObjectRoot(cx, p-obj, "JSB::JSBinding");

return JS_TRUE;

}

JS_ReportError(cx, "Wrong number of arguments: %d, was expecting: %d", argc, 0);

return JS_FALSE;

}

// This function is mapping the function “create” when using JavaScript code

JSBool js_create(JSContext* cx, uint32_t argc, jsval* vp){

cocos2d::CCLog("js is creating...");

if (argc == 0) {

JSB::JSBinding* ret = JSB::JSBinding::create();

jsval jsret;

do{

if (ret) {

js_proxy_t* proxy = js_get_or_create_proxyJSB::JSBinding(cx, ret);

jsret = OBJECT_TO_JSVAL(proxy-obj);

}

else{

jsret = JSVAL_NULL;

}

} while(0);

JS_SET_RVAL(cx, vp, jsret);

return JS_FALSE;

}

JS_ReportError(cx, "Wrong number of arguments");

return JS_FALSE;

}

void js_finalize(JSFreeOp* fop, JSObject* obj){

CCLOGINFO("JSBindings: finallizing JS object %p JSB", obj);

}

// Binding JSB type

void js_register(JSContext* cx, JSObject* global){

jsb_class = (JSClass *)calloc(1, sizeof(JSClass));

jsb_class-name = "JSBinding";

jsb_class-addProperty = JS_PropertyStub;

jsb_class-delProperty = JS_PropertyStub;

jsb_class-getProperty = JS_PropertyStub;

jsb_class-setProperty = JS_StrictPropertyStub;

jsb_class-enumerate = JS_EnumerateStub;

jsb_class-resolve = JS_ResolveStub;

jsb_class-convert = JS_ConvertStub;

jsb_class-finalize = js_finalize;

jsb_class-flags = JSCLASS_HAS_RESERVED_SLOTS(2);

static JSPropertySpec properties[] = {

{0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER}

};

// Binding functionTest function

static JSFunctionSpec funcs[] = {

JS_FN("functionTest", js_functionTest, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE),

JS_FS_END

};

// Binding create() function

static JSFunctionSpec st_funcs[] = {

JS_FN("create", js_create, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE),

JS_FS_END

};

// Binding constructor function and prototype

jsb_prototype = JS_InitClass(

cx, global,

NULL,

jsb_class,

js_constructor, 0,

properties,

funcs,

NULL,

st_funcs);

JSBool found;

JS_SetPropertyAttributes(cx, global, "JSB", JSPROP_ENUMERATE | JSPROP_READONLY, found);

TypeTestJSB::JSBinding t;

js_type_class_t* p;

uint32_t typeId = t.s_id();

HASH_FIND_INT(_js_global_type_ht, typeId, p);

if (!p) {

p = (js_type_class_t* )malloc(sizeof(_js_global_type_ht));

p-type = typeId;

p-jsclass = jsb_class;

p-proto = jsb_prototype;

p-parentProto = NULL;

HASH_ADD_INT(_js_global_type_ht, type, p);

}

}

// Binding JSB namespace so in JavaScript code JSB namespce can be recognized

void register_all(JSContext* cx, JSObject* obj){

jsval nsval;

JSObject* ns;

JS_GetProperty(cx, obj, "JS", nsval);

if (nsval == JSVAL_VOID) {

ns = JS_NewObject(cx, NULL, NULL, NULL);

nsval = OBJECT_TO_JSVAL(ns);

JS_SetProperty(cx, obj, "JSB", nsval);

}

else{

JS_ValueToObject(cx, nsval, ns);

}

obj = ns;

js_register(cx, obj);

}

現(xiàn)在已經(jīng)完成了大部分工作,但是我們需要在“SpiderMonkey”進(jìn)行注冊(cè)。

打開(kāi)“AppDelegate.cpp”增加以下代碼

ScriptingCore* sc = ScriptingCore::getInstance();

sc-addRegisterCallback(register_all); //add this line

步驟3. 內(nèi)存管理

在register_all函數(shù)前增加兩個(gè)新函數(shù)。

JSBool JSB_cocos2dx_retain(JSContext* cx, uint32_t argc, jsval *vp){

JSObject* thisObj = JS_THIS_OBJECT(cx, vp);

if (thisObj) {

js_proxy_t* proxy = jsb_get_js_proxy(thisObj);

if (proxy) {

((CCObject* )proxy-ptr)-retain();

CCLog("Retain succeed!");

return JS_TRUE;

}

}

JS_ReportError(cx, "Invaild native object");

return JS_FALSE;

}

JSBool JSB_cocos2dx_release(JSContext* cx, uint32_t argc, jsval *vp){

JSObject* thisObj = JS_THIS_OBJECT(cx, vp);

if (thisObj) {

js_proxy_t* proxy = jsb_get_js_proxy(thisObj);

if (proxy) {

((CCObject* )proxy-ptr)-release();

CCLog("Release succeed!");

return JS_TRUE;

}

}

JS_ReportError(cx, "Invaild native object");

return JS_FALSE;

}

在register_all函數(shù)中增加以下代碼:

JS_DefineFunction(cx, jsb_prototype, "retain", JSB_cocos2dx_retain, 0, JSPROP_READONLY | JSPROP_PERMANENT);

JS_DefineFunction(cx, jsb_prototype, "retain", JSB_cocos2dx_release, 0, JSPROP_READONLY | JSPROP_PERMANENT);

步驟4. 使用C++代碼回調(diào)Java腳本代碼

在C++代碼回調(diào)Java腳本代碼之前增加一些代碼至“hello.js”文件。

var testJSB = new JSB.JSBinding();

testJSB.callback = function(i, j){

log("JSB Callback" + i + j);

};

然后打開(kāi)“JSBinding.cpp”在“functionTest”中增加一些代碼。

js_proxy_t* p = jsb_get_native_proxy(this);

jsval retval;

jsval v[] = {

v[0] = UINT_TO_JSVAL(32),

v[1] = UINT_TO_JSVAL(88)

};

ScriptingCore::getInstance()-executeFunctionWithOwner(OBJECT_TO_JSVAL(p-obj),

"callback", 2, v, retval);

使用“executeFunctionWithOwner()”函數(shù)簡(jiǎn)化函數(shù)調(diào)用程序

步驟5. 綁定測(cè)試

在“hello.js”文件中增加以下代碼。

var testJSB = new JSB.JSBinding();

testJSB.retain();

testJSB.functionTest();

testJSB.release();

步驟6. 現(xiàn)在取出(check out)項(xiàng)目

如果你的綁定程序正確無(wú)誤,將會(huì)在調(diào)試窗口看到如下界面:

恭喜你成功將JS綁定至本地代碼!

C語(yǔ)言數(shù)據(jù)傳遞到JavaScript

js是在前臺(tái)瀏覽器運(yùn)行?可以把數(shù)據(jù)寫(xiě)入一個(gè)文本文件,js異步讀取這個(gè)文本文件。

網(wǎng)站名稱:c到j(luò)avascript的簡(jiǎn)單介紹
當(dāng)前地址:http://chinadenli.net/article45/dsejpei.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航商城網(wǎng)站微信小程序手機(jī)網(wǎng)站建設(shè)微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司