1. 程式人生 > >微信小遊戲--JS基礎

微信小遊戲--JS基礎

配置Node.js環境: 1.下載64位Node.js 2.開啟CMD查詢是否安裝成功或者版本號 node  -v =======================================

IDE :subline

=======================================

資料夾隱藏副檔名=》在檔名選項修改或者勾選副檔名 設定預設編輯器=》選擇開啟方式修改

=========================================== 可以解析執行js:node,瀏覽器(指令碼語言只有解析,不用編譯) node解析步驟: 1書寫js檔案 2在js檔案的資料夾內 shift+右鍵=》window PowerShell 3輸入dir檢視js資訊 4輸入node   main.js  點Tab自動補齊

注意 :儲存檔案並且js語句開頭要小寫

註釋://   多行註釋 /*   */

win10編輯卡頓 =》右鍵屬性,取消快速編輯

windos PowerShell 命令快取=》 上下鍵

========================================== 變數 :自動記憶體分配 js變數只存該語言型別的資料和引用 js使用var定義變數  var a1=8 ; var  a2=7.5 ;var a3=true;

通過行數,提示原因找錯誤 undefine :未定義,即使定義了變數不賦值或者賦值不對也會報錯

var a=null(允許)

取得變數型別 var b=false type of b

注意變數使用範圍

=============================================== 表示式: 賦值=  算術:+-*/  %  括號  判斷: >= <=   == != <>   字元連線  console.log(re,re+4) :沒有改變re的值  簡化表達 :  +=     -=  --      ++      =================================================    條件 :   if()  {    }   else {}     多條件:  if(條件)  else if(條件)  else if (條件)  else 

邏輯運算子 :&&       ||    

注意 :儘量不要在判斷語句中做運算 num+=1 if(num)

//多條件,case swich (value) {   case  1:   {}   break;

  case  2:   {}   break ;   case  3:   {}   break;   defalut :   {}   break ;

}

迴圈 : while (條件) {

}

for(初始化語句;條件判斷;迭代遞增或者遞減) {

} var i=4; var j=5; for(i=5,j=6;i+j<80;i=i+1,j=j+1) {}

迴圈控制 :運用場景:for,while  continue(跳出本次迴圈) break 終止迴圈 =============================================== 字串 : var str=“XXX”; var str=‘XXX’;

var array=【】;空陣列 array=【1,2,3,4】; 數字

array=【1,true,“Hello“,【1,2,3】】 陣列巢狀 0作為陣列索引開始

注意索引是否越界

=============================================== 表 var table= {   age:14;   name: "XXX";       arrayxxx:【1,2,3,{     adrr:”127.0.0.1“,     port:6000     }]        }】

  table :   {   XXX :XXX   X      }    array2;array }

表可以存放所有的資料型別 , 陣列內可以存表 ,表存陣列

表的訪問 =》key本質字串 array2【”XXX“】 array2.XXX;

整數key只能    表物件【整數值】 或者【”整數值“】訪問

增加表成員  :表物件.XXXkey=XXX;  ========================================== 函式: fuction XXX(引數) {

程式碼塊

}   function XXX(a1,a2) {   XXXXXXXX; retun XXX;(返回並跳出方法) } 呼叫 : XXX(3,4);

存放結果: var ret=XXX(3,4);

引用傳遞 : var my_add=XXX; ret =my_add(3,4);

表中存方法=》 var mathabc={

my_add:XXXXXXXX;   func_key :fuction()   {   XXXXXXXX      }

} var ret =mathabc.my_add(3,5);

mathabc.func_key();

======================================================= Math函式: Math.PI  ;圓周率 Math.random();          [0,1)    0到1 不包含1的小數

var value=min+(max-min+1)*Math.random();

向下取整: Math.floor();

三角函式 sin ,cos,tan

value =Math.sin(XXXXXXXX);//傳入弧度

var degree=r*180/Math.PI (  傳入r 為弧度,轉為角度)

var r=(degrees/180)*Math.PI; (傳入degrees為角度,轉為弧度)

反三角函式 value =Math.asin() //傳入弧度

atan2 :返回座標角度 範圍(-180,180]=>(-PI,PI] var  r=Math.atan2(1,1); value =rad2deg(r);轉角度

Math.sqrt();開根號

====================================================

陣列高階使用 : array .length;

for(var index  in  array) {

} for(var i=0;i<array_data.length;i++) {

} 陣列新增物件 array_data.push(100); array_data.push("Hello"); array_data.push({ key :"value"

}) 找索引:  var array_data.indexOf(300)//填寫的是陣列的值 引數=>從2索引開始,刪除個數 var data2=array_data.splice(2,2);

陣列排序: array_data=[1,2,3,4]; sort傳入方法 array_data.sort( function(Ihs,rhs) {  if(Ihs>rhs) {

 return  -1; } else if (rhs>Ihs) {

 return 1; } else {   return 0;//Ihs==rhs

}

})

隨機排序

array_data.sort( function ( Ins,rhs) { if(Math.random()<=0.5) {  return -1; } else {  return 1;

}}) 抽取隨機: value =array_data[0] ============================================= 表的高階使用:

刪除對應的key delete XXX["XX "] delete XXX.sss;

============================================== 字串高階 :

var str="XXXX " str.length; str.indexOf("X") 首次出現位置索引 var new_str= str.replace("X","3q")//替換,產生新物件 大小寫併產生了新物件 str.toLowerCase(); str.toUpperCase();

============================================ require("./XXX") 第一次載入js檔案並執行=>如果載入過就不執行,但都返回一個module.exports物件,需要在被載入的檔案中定義module.exports物件,沒有定義則返回{} 載入的檔案通過util可以呼叫被載入的js中的物件 載入:  var util=require("./XXX") 被載入: var utils= {   add:add,   test:test,

}; module.exports=util; 一般用類名定義接收,易於查詢

============================================

function fun1(a1,a2) {  this;

}

 1.this的顯示傳遞=>上層決定this 函式.call :   fun1.call({ XXXX  },3,4)   this={XXXX} 可以是表或者任意物件

2.this的隱式傳遞=> var tools= { fun1:fun1,

} 表的函式key()       tools.fun1=>this=表

3.this的強制傳遞  =>底層決定this var new_fun=fun1.bind({name ;"blake'}); new_fun(3,4); tools.fun1=new_fun;  tools.my_fun(3,4);   結果this依舊為強制表

fun1(3,4) //不是強制表,因為bind生成了新的方法物件,所以this還是和環境有關的值console new_fun.call({name :"" },3,4)//還是強制表 結論: 強制的表顯示call,隱式也無法改變

============================================= 建構函式=> function:可以填充表字段物件 function person(name,age) {   this.name=name;//增加屬性

}

person.prototype : 函式的表 ,函式未初始時為空表,可以填充方法,類的原型 person.prototype.get_age=function() {  return this.age;

}

var blake=new person("blake"); //step1:產生一個新表,呼叫person的方法,相當於顯示call傳遞this=》this表示新表 step2:同時會產生一個物件 (新表._proto_),並複製prototype表的內容 var ret=blake.get_age(); 

注意點 1會先去blake表中去尋找是否有get_age()key,沒有就去新表._proto_下去找 2如果沒有強制的this繫結,   新表.方法=>this為新表 3只有新表的欄位屬性和_proto_是屬於新表的,其他的如方法只是new 新物件新增欄位的手段,prototype是方法的複製手段

等價於=> function new_person(name) {    var instance={};    person.call(instance,name);//把instance作為this ,this.name為instance表新增key    instance._proto_={};    for(var key in person.prototype)     {       instance._proto_[key]=person.prototype[key];               }      return instance;

}

var xiaohong =new_person("xiaohong")

var ret=xiaohong.get_age();

等價於=》 var my_person= {  name:"XXXX";  age :12, _proto_ : {  get_name:person.prototype.get_name,  get_age:person.prototype.get_age,

} }

=========================================================== 錯誤 : Invalid or unexpected token(無效或者意外標記)=》格式不正確=》注意逗號,括號

============================================================== subline快捷鍵: https://blog.csdn.net/mycms5/article/details/70194045/ 多行註釋 ctrl+ “+”+ / ==============================================================  類:通過構造方法和xxx.prototype(類的成員函式)組成類,一類組成結構相同的物件  建構函式和成員函式中的this為各自的類,可以完成各自的邏輯。  Enemy.js: function Enemy(name ,age) {    this.name=name;    this age=age;

} Enemy.prototype.acctack_player=fuction() {   consele.log("attack_player",this);//this代表Enemy新表

} module.exports=Enemy;

main.js: var Enemy=require(“./Enemy”) var e1=new Enemy("hao",12); e1.attack_player(); var e2=new Enemy("jj",16); e2.attack_player(); ========================================================= 類的繼承=>獲取原型方法,擴充套件方法 錯誤寫法 :BossEnemy.prototype=Enemy.prototype => 原因: 只是傳遞了Enemy.prototype的引用,並沒有複製物件到BossEnemy.prototype中,改變表值會改變 Enemy.prototype的值

方法和欄位的繼承和擴充套件

方法1: 迴圈複製物件 function BossEnemy() {

 Enemy.call(this,name,age)//this為新表,但表名為Enemy      //擴充套件欄位   this.blood=90;

} BossEnemy.prototype={}    for(var i in Enemy.prototype)    {  BossEnemy.prototype[i]=Enemy.prototype[i]; }

方法2: 利用new機制複製

var a =function(){}//空表,只有prototype物件 a.prototype=Enemy.prototype; BossEnemy.prototype=new a();  =>a._proto_=>Enemy.prototype

擴充套件方法: BossEnemy.prototype.boss_attack=fuction() {

XXX;

} var boss=new BossEnemy(); boss.boss_attack(); boss.acctack_player(); //acctack_player方法中的this為新表,但表名為Enemy

========================================== 函式過載:

BossEnemy.prototype.attack_player=function() {         Enemy.prototype.attack_player.call(this);//呼叫父類的attack_player,傳入的是boss表

      return this.name; } boss.attack_player();

=========================================== 繼承函式=>實現類的繼承和擴充套件 Class結構

Class( {   extend :Enemy,  //繼承物件      init :function()   {               }                     boss_attack:function()   {         },   add:function()   {               }

}

);

var BossEnemy2 =function Class(Class_desic)//傳入定義Class引用 {         var new_class=function(name,age)//new_class的建構函式,可以傳入引數         {            //欄位繼承              if(Class_desic.extend)            {                 Class_desic.extend.call(this,name,age)//呼叫基類建構函式                    }           //欄位擴充套件           if(Class_desic.init)           {            Class_desic.init.call(this);//呼叫新類Class的初始函式                      }                    }         //方法繼承         if(Class_desic.extend)           {               var a=fnction (){};              a.prototype=Class_desic.extend.prototype;               new_class.prototype=new a();         }         else         {            new_class.prototype={};                  }         //方法擴充套件         for(var i in Class_desic)         {            if(i=="extend")             { continue;}             new_class.prototype[i]=Class_desic[i];        }                return new_class;// BossEnemy2=new_class

}

var b2=new BossEnemy2("whhw",32);  //呼叫Class方法,傳遞 this, this為 new_class

============================================ 程式碼規範: 快捷方式: ctrl+c, ctrl+v   跳過單詞;ctrl+left or right; 選擇單詞 ctrl+shift+left or right 選中一行:shift+home or end 選中多行:shift+ up or down

win+E shift+右鍵

 縮排:一個Tab

命名: 1駝峰 getName(); 2匈牙利 GetName,要加上型別標識 :iAge fDistance 3Linux命名 get_age

空格注意整齊 for(var i=0; i<=10,i++)

var utils=require("utils") //指令碼名稱和定義的名稱相同可以方便尋找指令碼物件 util.abc();

注意語法錯誤提示