今天新学内容JS
第一点,
(1)Array类,数组,在JS中的数组就相当于Java中的list集合(个数任意,数据类型任意)
2种创建方式
静态:var obj = [10,20,true,’小火车’,455];
动态:var obj2 = new array();
(2)
var time = new Date();
alert(time);
alert(time.toDateString());
alert(time.getFullYear());
函数类型对象
(有关函数声明的三种方式)
1,标准声明–>开发中基本都用的这个
特点:在浏览器加载遇到这个函数认为开发人员创建实例对象myFun,在myFun对象管理的内存中,存放一个具体函数执行体,myFun会有对函数体的调用能力,因此JS中,认为myFun是function数据类型,也体现了面向对象思想,每声明一个函数,就相当于创建一个function类型对象
myFun();
function myFun(){
alert(“myFun is run….”);
}
myFun();//位置任意
//浏览器加载网页的时候,会把script标签中的内容自动分配给window对象。
所以调用方法的时候可加可不加。
2和3都相当命令行,只有运行后才能调用myFun()
2,匿名声明–>命令行时在函数运行时候执行
var myFun2 = function(){alert(“myFun2 is run”)};//这就相当一个命令行
3,构造函数声明函数,同2,也相当一个命令行
var myFun3 = new Function(){‘p1’,’p2’,”var p3 = p1+p2;alert(“p3=”+ p3);”};
myFun6(1)–》当你调一个参数的时候,另一个相当于undefined类型,所以相加结果为NaN,错误的数据类型,
alert(myFun3(1,8))执行结果,p3=9 还有个窗口写着undefined(这是如何来的)
这样来的,相当于
var myFun6 = new Function();
alert(myFun6());//undefined
,因为alert(函数)没有任何返回值. 所以alert弹出信息框的内容就是undefined
(有关函数的参数)
有关java中的动态参数回顾{
public void test(int…param){
}
int...是动态参数,表示当前方法test运行时,可以没有实参
表示当前方法test运行时,可以有任意个数的int类型实参
表示当前方法test运行时,可以接收一个int类型数组作为实参
}
要是有调用函数必须带实参这种想法是不对的?
JS中效仿Java中的动态参数,因此JS在运行时,实参个数和形参个数可以不一致
function myFun(p1,p1){
alert(“myFun is run…”);
}
myFun();//正常运行
myFun(10);//正常运行
myFun(10,450,true,’abc’,new Date()); //正常运行
有关得到实参个数和实参值
(1)运行时得到
因为实参个数和形参个数不必一致,浏览器创建函数类型实例对象时,会自动为函数类型实例对象
分配一个【arguments】属性,这个属性是一个数组,里面存放的是
当前函数运行时所接收的所有实参—-》知道了运行时调用时接收的实参个数和内容
function myFun5(){
var paramNum = arguments.length;
alert(“实参个数=”+paramNum);
for(var i = 0;i < arguments.length;i++){
alert("实参数值"+arguments[i])
}
}
myFun5('abd',true,20,456,"ccd",new Date());//6
(2)声明中得到参数个数
function myFun (p1,p2,p3) {
}
//myFun.length这里出错了,对象myFun记住
alert("函数声明时声明了多少形参"+ myFun.length);
有关arguments的callee属性—处理递归问题
function myFun(param){
if(param <=1){
return 1;
}else{
//return param + myFun(param-1);
return param + arguments.callee(param-1);
}
}
alert(myFun(3));//1+2+3=6
思考题:执行结果,若报错原因,怎样改#
结果:抛出错误
原因如下
修改:return param + arguments.callee(param-1);//因为arguments(属性)的callee作用是(属性指向函数对象所管理的内存)
回归下Java的this属性
(1)Java中的this与JS中的this指向一致。
(2)Java中的this出现位置
(a)出现在构造方法中:表示由构造方法创建的实例对象
(b)出现在普通方法:表示当前方法的实例对象
浏览器加载完成,生成实例对象myFun –联系->拥有执行能力对函数执行体
var fun1= myFun;//执行后,生成有一个新的实例对象fun1指向函数执行体
myFun= null;切断了myFun和函数执行体的联系,指向了空内存块(不可添加数据)
alert(fun1(3));//fun1(3)–》去函数执行体执行,当碰到
return param + myFun(param-1),此时的myFun是个Object数据类型,名下无函数,所以出现语法错误
第二点,关于Thread的回顾
今天主要简单模拟了植物大战僵尸
还有关于线程优先级的理解:单核CPU情况下
设置t1为优先级高,并不是说他先执行完,只不过是分配CPU时间片的时间长些。要比t2先执行完的几率大些
线程在Java语言中使用抢占式调度模型,
分为10,5,1分别是MAX_PRIORITY,NORMAL_PRIORITY,MIN_PRIORITY
线程默认是普通5。主线程是先执行最后走的
public class TestThread {
public static void main(String[] args) {
//设置线程的优先级,必须在启动线程前设置
Runnable r = new Processor();
//创建线程对象
Thread t1 = new Thread(r,"t1");
Thread t2 = new Thread(r,"t2");
//设置线程的优先级,必须在启动线程前设置
t1.setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
System.out.println("t1的优先级" + t1.getPriority()+",t2的优先级:" + t2.getPriority());
}
}
class Processor implements Runnable{
@Override
public void run() {
for(int i = 0;i < 100;i++){
//Thread.currentThread() 返回当前正在执行的线程对象
System.out.println(Thread.currentThread().getName() +"----->"+ i);
}
}
}
第三点 今天阅读感悟
读了mind hacks 中有关算法思维的介绍和关于学习方法的借鉴=
密集型学习,让这些你学的东西时时刻刻在你脑子里,多动手,保持热情,纸笔随时可记录,
目前对算法里面的属于不懂,哈几里德,背包等,这些新鲜词可以去了解,
主要是先去阅读作者有关读书思维和如何从证明定理,和证明的思路由来,能够知道自己现在的思维误区和学习中应改进的地方
从下周开始,课余时间把数据结构去了解,还有think in java英文原版书,去看,熟悉计算机的英语语言,争取做到能够顺下来思路。
去寻找书中案例源码,可以照猫画虎。
重点还是放在复习JavaSE中的重点知识。去练练追踪源码,看书。多敲代码。