配置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;//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) //fun1为原方法,因为bind生成了新的方法对象,该相关的this为强制表,所以本this还是和环境有关的值console
new_fun.call({name :"" },3,4)//this还是强制表
结论:
强制的表显示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;//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(name,age)
{

Enemy.call(this,name,age)//this为新表,,无表名
  
  //扩展字段
  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(“你好”,45);
boss.boss_attack();
boss.acctack_player(); //acctack_player方法中的this为新表,无表名

==========================================
函数重载:

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 和方法有关,单一new构造函数和new 类 不同

============================================
代码规范:
快捷方式: 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();

注意语法错误提示

微信小游戏--JS基础相关推荐

  1. 对于微信小游戏JS开发的一点整理

    对于微信小游戏JS开发的一点整理 我像大家一样,遇到了不懂的喜欢在csdn上搜索解决问题,这篇文章参考了csdn上一些博主的文章,故标为转载,主要是参考博主:陈田田. tips 代码包大小上限为4MB ...

  2. 微信小游戏-CocosCreator 基础(一)

    路径:不中文 设置IDE=>偏好设置=>数据编辑=>外部脚本编辑器 cocosCreator: resources: cocos2d-x引擎 :C++ engine :H5引擎:js ...

  3. 微信小游戏_China_Fighting——game.js、game.json、project.config.json

    目录 微信小游戏_China_Fighting--前言 微信小游戏_China_Fighting--基础支撑类(sprite.animation.pool) 微信小游戏_China_Fighting- ...

  4. 微信小游戏开发零基础教程(一)-CocosCreator

    微信小游戏零基础教程(一)-CocosCreator 最终效果预览 准备工作 创建工程 测试第一个场景 最终效果预览 本教程最后制作的游戏效果: 准备工作 下载 微信开发者工具 最新版->下载地 ...

  5. Unity转微信小游戏与JS交互

    微信小游戏JS交互方式: 微信小游戏机制问题,在微信小游戏中不会加载index.html,所以写在index.html的函数均不会被调用到 1.自行创建calljs.js文件中添加定义,每次编译该文件 ...

  6. html微信小游戏,白鹭HTML5游戏转微信小游戏问题集锦,你关心的都在这里

    原标题:白鹭HTML5游戏转微信小游戏问题集锦,你关心的都在这里 首先,再次强调一些微信小游戏的基础技术限制: * 不允许操作 DOM.BOM.如果必须改成小游戏相应的 API 调用方式,目前引擎会自 ...

  7. Html5小游戏 转微信小程序,白鹭H5游戏转微信小游戏问题集锦,你关心的都在这里...

    首先,再次强调一些微信小游戏的基础技术限制: * 不允许操作 DOM.BOM.如果必须改成小游戏相应的 API 调用方式,目前引擎会自动引入weapp-adapter.js 文件做兼容处理. * 不允 ...

  8. 微信小游戏_China_Fighting——npc类(enemy、mask、sars)

    目录 微信小游戏_China_Fighting--前言 微信小游戏_China_Fighting--基础支撑类(sprite.animation.pool) 微信小游戏_China_Fighting- ...

  9. 微信小游戏_China_Fighting——后记

    目录 微信小游戏_China_Fighting--前言 微信小游戏_China_Fighting--基础支撑类(sprite.animation.pool) 微信小游戏_China_Fighting- ...

最新文章

  1. 别研究买房了,墓地你研究过吗?
  2. 交互式计算机图形学总结:第四章 观察
  3. 阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结
  4. iOS build Version 作用
  5. 学习Kubernetes 和容器技术体系的最佳方法
  6. php yield 个人小解_PHP5.5新特性之yield理解与用法实例分析
  7. 夏天到啦!你的mac过热怎么办?教你几招过热技巧~
  8. 【Matlab学习笔记】【图像滤波去噪】高斯平滑滤波
  9. python: 动态网页playwright 爬虫实践
  10. python音乐播放器图片_Python音乐播放器
  11. 如何实现跨项目共享token
  12. 短线起爆点(移动均线15种战法)
  13. es文件浏览器android看不到文件,es文件浏览器搜索不到电脑解决办法 es文件浏览器找不到电脑...
  14. 4.7 51单片机-DS1302 实时时钟芯片
  15. Charles手机端抓包,抓取小说软件整本小说的示例
  16. RealView 应用
  17. HDU-6121 Build a tree - 2017 Multi-University Training Contest - Team 7(完全K叉树)
  18. The Shawshank Redemption-11
  19. IE下载附件,文件大小超过10M后 无法下载
  20. onLoad和onShow触发时机及区别

热门文章

  1. namedtuple
  2. uniapp小程序当前页面刷新
  3. python列表(list)的遍历
  4. HTML学习(—..—)
  5. 会声会影2022一键安装图文详细教程
  6. linux oracle 查看版本
  7. 使用 Metasploit 利用 OpenSSH 用户枚举漏洞 (CVE-2018-15473, CVE-2016-6210, CVE-1999-0502)
  8. 【coolshell酷壳】简明 Vim 练级攻略
  9. 逻辑斯蒂分布模型、二项逻辑斯蒂回归模型、多项逻辑斯蒂回归模型
  10. 阿里云服务器优惠以及采购流程