第二章:面向对象的javascript

本章将介绍js的几个重要部分:引用、作用域、闭包、上下文。以及面向对象的知识

引用

“引用”是一个指向对象实际位置的指针。

理解:参考C#的引用类型和值类型

-- 基础类型中的undefined、number、boolean和string,是“值类型”变量

- 基础类型中的array、function和object,是“引用类型”变量

- 使用new()方法构造出对象,是“引用类型”变量

var arr = ['2', '3'];
        var arr_backup = arr;
        arr = ['4', '5'];
        alert(arr==arr_backup);//output false

 

函数重载和类型检查

js的函数重载必须以来两件事情:判断传入参数的数量和判断传入参数的类型

判断参数的数量用argument参数来实现。

判断参数的类型如下表

通过 typeof,  instanceof, ob.constructor 来判断

  

 

 

作用域

javascript的对象作用域是由函数划分的,而不是块(block)划分(比如if, for等)

        var foo = "test";
        if (true)
            var foo = "new test";
        alert(foo); //output "new test"
        (function() { var foo = "old test"; })();
        alert(foo); //output "new test"

 

闭包

意味着内层的函数可以引用存在于包围它的函数内的变量

var lists = document.getElementsByTagName('li');
for(var i = 0 , len = lists.length ; i < len ; i++ ){
        lists[ index ].onmouseover =    
                  (function( index ){
			return function(){
            			alert( index );    
        		};                    
    		})( i );//利用闭包的函数自调用的特性,当i的值传到匿名函数之后,匿名函数就可以自己调用,然后得出结果。
}

 

上下文

this关键字的理解。(这个一言难尽)

 

面向对象基础

对象。js里面有两种对象,一种是 json对象,还有一种的函数对象。 参考 javascript碎碎念(面向对象备忘)

对象的方法:

1、公共方法

      使用prototype关键字为对象设置的方法。

2、私有方法

function Classroom(students, teacher) {
            function display() {
                alert("私有");
            }
            this.students = students;
            this.teacher = teacher;
            display();
        }
display方法只能在Classroom里面调用

3、特权方法

特权方法指代哪些在查看并处理私有变量的同事以公共方法访问的方法。
本质上,特权方法是动态生成的,因为他们是在运行时才添加到对象中的,而不是在代码第一次编译时就已经生成的。

function User(properties) {//接收一个json对象作为参数
            for (var i in properties) {//i 为每个json的“name”,这里即为 name,age
                (function(which) {//which为User函数对象的实例
                    var p = i;//p为 name, age
                    which["get" + p] = function() {// 相当于this.getname=function(){ return properties.name }
                        return properties[p];      // 拓展了User对象的函数
                    }
                    which["set" + p] = function(val) {// 相当于this.setname=function(val){ properties.name=val; }
                        properties[p] = val;       // 拓展了User对象的函数
                    }
                })(this);
                
            }
        }
        var user = new User({ name: "Bob", age: 44 });
        alert(user.getname()+"  "+user.getage());
posted @ 2010-04-01 17:36  MyCoolDog  阅读(303)  评论(0编辑  收藏  举报