什么是构造函数?
this指向的⼏种情况
1.全局中调⽤
this.name //this指向window对象
2.函数调⽤
test();//test()函数中的this也指向window对象
3.对象的⽅法调⽤
obj1.fn();//obj1对象的fn()⽅法中的this指向obj1
4.调⽤构造函数
var dog=new Dog();//构造函数内的this指向新创建的实例对象,也就是这⾥的dogcall和apply
call和apply的作⽤⼀样,只是接受参数的⽅式不⼀样,call接受的是多个单个参数,apply接受的是参数数组。
call和apply的作⽤简单地可以说成,当⼀个对象实例缺少⼀个函数/⽅法时,可以调⽤其他对象的现成函数/⽅法,其⽅式是通过替换其中的this为这个对象实例,改变函数运⾏时的上下⽂。
普通函数与构造函数相⽐有四个明显特点:函数prototype
1.不需要⽤new关键字调⽤
fn();2.可以⽤return语句返回值
1 2 3 4function fn(a,b){
return a+b;
}
alert(fn(2,3));//alert:5
3.函数内部不建议使⽤this关键字
我们说不建议使⽤,当然硬要⽤是可以的,只是要注意这时候发⽣了什么。如果在普通函数内部使⽤this关键字定义变量或函数,因为这时候this指向的是window全局对象,这样⽆意间就会为window添加
了⼀些全局变量或函数。
1 2 3 4 5 6function greeting(){
this.name="sheila";
alert("hello "+this.name);
}
greeting();//alert:hello sheila
alert(window.name);//alert:sheila
4.函数命名以驼峰⽅式,⾸字母⼩写
构造函数
在JavaScript中,⽤new关键字来调⽤定义的构造函数。默认返回的是⼀个新对象,这个新对象具有构造函数定义的变量和函数/⽅法。举个例⼦:
1
2 3 4 5 6 7 8 9 10 11 12 13function Prince(name,age){
this.kind=true;
this.rich=true;
this.name=name;
this.age=age;
}
Frog=function(){
console.log("Prince "+this.name+" turned into a frog."); }
var prince=new Prince("charming",25);
与普通函数相⽐,构造函数有以下明显特点:1.⽤new关键字调⽤
new关键字来完成:
a、创建⼀个空对象;
b、将关键字this指向这个空对象;
c、执⾏构造函数⾥⾯的代码,给当前空对象this设置属性和⽅法;
d、将this这个当前对象返回。
var prince=new Prince("charming",25);
2.函数内部可以使⽤this关键字
在构造函数内部,this指向的是构造出的新对象。⽤this定义的变量或函数/⽅法,就是实例变量或实例函数/⽅法。需要⽤实例才能访问到,不能⽤类型名访问。
prince.age;//25
Prince.age;//undefined
3.默认不⽤return返回值
构造函数是不需要⽤return显式返回值的,默认会返回this,也就是新的实例对象。当然,也可以⽤return语句,返回值会根据return值的类型⽽有所不同,细节将在下⽂介绍。
4.函数命名建议⾸字母⼤写,与普通函数区分开。
不是命名规范中的,但是建议这么写。
1.第⼀步,创建⼀个空对象。
var prince={}
2.第⼆步,将构造函数Prince()中的this指向新创建的对象prince。
3.第三步,将prince的_proto_属性指向Prince函数的prototype,创建对象和原型间关系
4.第四步,执⾏构造函数Prince()内的代码。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论