2018-07-12 JavaScript(4)
2018-07-12 本文已影响0人
棕色试剂瓶
JavaScript基础语法(4)
在js中,万物皆对象。为什么zhe么说呢?因为即使是一个类,在js中也是object或者window的一个对象。
对象
代码示例:
function User(id,name) {
this.id=id;
this.name=name;
this.show=function () {
console.log(this.id+">>>"+this.name)
}
}
var u1=new User('001','tom');
var u2=new User('008','rose');
u1.nation='china';
说明:
- 当进行u1.nation='china'操作后,相当于User类新加了一个nation属性,并且将u1的nation属性设置为china。
代码示例:
function Admin() {}
var ad01=new Admin();
var ad02=new Admin();
ad01.name='admin001';
说明:
- 函数也可以看成是一个类,同样可以通过上述方法为其添加属性,赋值。
代码示例:
var vip={};
vip.name='vipuser';
说明:
- 也可直接为类通过.的方式添加属性,并赋值。
原型链
任何一个类都有一个原型,原型中存放的东西是共有的,可以被其实例化的对象所调用,也可以被其子类的实例化对象所调用。
图形说明.png
图片示例:
- 结合图片,当调用u1的属性时,会现在u1的父类中寻找,若没有找到会到其父类的prototype中寻找,如果还没找到回到其父类的父类的prototype中寻找。
u1=>u1父类=》u1父类prototype=》u父类的父类=》u1父类的父类的prototype
- 这里面在类没有实例化的时候相当于一个二维平面,只具备逻辑概念,没有实体。prototype和类实例化都相当于几何体,有实际意义。
代码示例:
User.prototype.nation='usa';
User.prototype.show=function () {
}
User.prototype.school='qinghua';
var u1=new User('001','tom');
var u2=new User('008','rose');
u1.nation='china';
console.log(`u1.nation=${u1.nation}`);
console.log(`u2.nation=${u2.nation}`);
结果:
u1.nation=china
u2.nation=usa
- 通过结果可以看出,prototype中的nation为所有对象共有。
可以通过如下方法整理自己的功能代码:
function Util(){
}
//登录功能
Util.prototype.login(){
}
//排序功能
Util.prototype.sort(){
}
以后在使用过程中可以直接通过Util.login()来调用方法。
计时器
计时器主要分为两种:
// var timeout=setTimeout(show,2000);//2000毫秒后执行一次
var inter=setInterval(show,1000); //间隔1000毫秒执行一次
- js是一种单线程异步的语言。
js一次只能执行一个任务,一个任务在执行一段时间后执行下一个,因为执行速度太快使人们觉得多任务同时执行。
代码示例:
function add(m,n) {
var c;
setTimeout(function () {
c=m+n;
},100);
return c;
}
console.log(add(10,20));
上面程序执行的结果为
undefined
- 因为当程序执行到setTimeout时,程序不会等待,而是直接向下执行,会直接返回c。c此时未定义,所以结果为undefined。(造成此结果的原因即为js的单线程异步执行机制)
回调函数
说明:
即a调用一个函数,在函数结束后会返回来调用通知a。
代码示例:
function add(m,n,callback) {
setTimeout(function () {
var c=m+n;
callback(c); //show(30)
},3000);
}
add(30,40,function (res) {
console.log(res);
})
这段代码中虽然function中会返回undfined,但是并被有人接受它,程序不结束,等待计时器结束后输出结果。
this
this表示this所在的函数被谁调用,this就是谁。