《精通JavaScript》笔记

一、类型判断

1. typeof obj 

2. obj.constructor 

    所有的javascript 对象都带有一个属性,称为构造函数(constructor)。

这一属性引用的是原本构造该对象的那个函数。

function User( name) {
    this.name = name;
};
var BillGates = new User( "Bill Gates" );
alert( BillGates.constructor == User ); // true

 

二、方法

1.公共方法

function User(){};
User.prototype.getName = function(){};//  public method 

2.私有方法

function User(){
     function fn(){}; // private method
}

3.特权方法

function User(){
    var age; //  private variable
     
// privileged method this.getAge = function() { return age; }; }

特权方法是在创建对象时才动态添加的,开销比 公共方法(prototype下的方法)大很多,但因其动态生成,其灵活性更强。

function User(config) {
     for (key in config) {
          this.get[key] = function(){}; // 动态指定方法名
     }
}

4.静态方法

User.fn = function(){}

静态方法不能被实例化对象引用

var user= new User();
user.fn();
// wrong
User.fn();// right

 三、作用域

 在 JavaScript 里, 作用域是由函数划分的, 而不是由块(block)划分(例如:while, if  和  for 语句)的。

 四、闭包

1.闭包意味着内层函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经终止。

2.闭包允许你引用父函数中的变量,但提供的值并非该变量创建时的值,而是副函数范围内的最终值。也就是说引用的是个常量,最终常量。

3.可以在函数内使用匿名自执行函数来解决上面的问题。

五、上下文对象 (this)

1.在 JavaScript 中,你的代码总是有一个上下文对象this(你的代码处在该对象内)。

2.换句话说,this总是指向当前代码所处的对象中。

3.也就是说 this 是动态的对象引用,谁调用代码就指向谁。如: 

function show(){
    console.log(this);
}

show(); // this指向Window

obj = {};
obj.show = show;
obj.show(); // this指向obj

4.代码变得不好懂了,幸运的是JavaScript提供了两个方法(call和apply)来易于理解,其第一个参数就表示this的指向。

function show(){
    console.log(this);
}

show(); // this指向Window

obj = {};
show.call(obj); // this 指向obj

 

 

 

posted on 2012-10-24 11:03  jiangtao_cool  阅读(76)  评论(0)    收藏  举报