JavaScript函数
1、定义函数function的四种方式。
function add(a,b){ return a+b; }; var add=function(a,b){ return a+b; }; var add=function test(a,b){ return a+b; }; var add=new Function('a','b','return a+b;');
2、 函数对象内存模型。
JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。
JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别;从函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg参数,其它都是为Function对象传递的参数。
function add(a,b){ return a+b; } var r=add.apply({},[1,2]); alert(r); r=add.call({},3,4); alert(r);
3、 JavaScript函数作用域及作用域链。
4、JavaScript this关键字。
JavaScript this的作用与指向跟很多真正面向对象的开发语言是有很大差别的,它不是始终指向当前对象,是会变化的。如果不注意这个问题,就有可能遇到看似没错的代码报错或不执行等问题,this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。
JavaScript对象
1、创建一个对象的两种方式。
var obj=new Object(); obj.name='huangpei'; obj.age=28; var obj2={name: 'huangpei',age:28};
2、JavaScript构造函数。
Object 本质上也是一个函数(Function, String, Number, Date),javascript中,任何一个函数,都是可以作为构造函数。
function People(name,age){ this.name=name; this.age=age; } var p1=new People('hp',28);
说明:js引擎帮我们生成一个空的对象obj, 调用 People.call(obj, args...),代码执行过程:
function People(name, age){
// 隐式执行 this = {};
this.name = name;
this.age = age;
// 隐式执行 return this;
}
function Test(name){
this.name = name;
// 存在显示return的时候,则返回实际返回的对象
//return {name : 'newname'};
//return new String();
// 当显示返回的是基本数据类型的时候,return 无效
//return 'abc';
//return 100;
//return true;
}
var oo = new Test('ooo');
alert(oo.name);
3、JavaScript对象原型链。
a、防止 多个对象重复定义函数
function People(name, age){ this.name = name; this.age = age; } People.prototype.show = function(){ alert('my name is ' + this.name + ", my age is " + this.age); }; var p1 = new People("who", 100); var p2 = new People("me", 40); p1.show(); p2.show(); alert(p1.show == p2.show);
b、继承
function Animal(name){ this.name=name; } function Bird(){ } Bird.prototype=new Animal('bird'); var b=new Bird(); alert(b.name);