JavaScript面向对象编程整理

这几天一直在学习javascript,脑子里面被各个书籍的概念充斥,比较混乱,现在整理一下。

一。Function

要理解javascript面向对象,首先必须理解js的function.在js中,函数的本质是对象,也就是说函数是function类型的实例,根据这里理解,函数名只是指向函数对象的指针而已(根据这个我们很好理解,javascript的函数没有重载的概念)。

函数的定义方式有三种:

1.函数声明:

function sum(a,b){

return a+b;

}

2.函数表达式:

var sum = function(a,b){

return a+b;

}

3.function构造函数:

var sum = new Function("a","b","return a+b");

三种方式的区别是:函数声明式在代码执行前被解析器添加到执行环境中,也就是函数声明可以放在调用代码之后。其他两者则不一样。构造函数方法,影响性能,因为有两次解析,一次式解析常规,另一次式对传入构造函数的字符串解析。

函数的使用

由于函数名式一个变量所以函数既可以当作参数,也可以当作函数的返回值。

函数的属性和方法

(1)内部特殊属性

arguments:一个类数组对象,保存着传入函数的所有参数。这个对象还有一个特殊的属性callee ,该属性是一个指针,指向拥有这个argumnets的函数。

function f(){

fi(num<=1){

return 1;

}else{

return num*arguments.callee(num-1)

}

}

this:函数体内部的this对象指向调用此函数的对象。

leng:希望接受的参数个数,也就是函数定义的参数个数。

property:--。

apply():在特定的作用域中条用函数,实际上等于设置函数体内的this值。

call():与上类是,不同的是apply有两个参数,一个是作用域,另一个是数组或argumnets。而call,参数不限定,而且参数直接传递给函数。

bind():ejs5定义的方法。这个方法会创建一个函数的新实例,并且this会被设置为传入bind()参数的值。

(2)一般属性

由于function也是对象,所以函数也有方法和属性。

定义在function内的属性是无法直接外部访问的。但是在外面创建的属性相当与函数的静态方法跟属性

///////////////////////
function test(){
        var tt ='1';
        function getTT(){
            console.log(tt);
        };
    }
    test.log=function(){
        console.log('this is the static method');
    }
    test.svar='static variable';
    console.log(test.svar);
    test.log();

 

二。对象

1.对象的创建

js对象的创建从本质上分为两种方法:

(1).根据object创建对象。

不管是new object对象还是字面量,或者工才厂模式,其本质都是返回一个object实例。

这种方式有一个比较重大的问题是 无法知道对象的具体类型。 也就是说只能typeof ==object.

(2).根据function创建对象。(也就是构造函数模式)

示例如下:

//////////

function Person(name,age,job){
    this.name=name;
    this.job = job;
    this.sayName=function(){
        alert(this.name);
    };
}

var person = new Person("liuxiang","23","soft");

 构造函数的函数名首字母大写(本质上没有这个规定,只是一种不成文的规定,方便区别构造函数跟普通函数)。

相关推荐