js

1、this误区 

# 第三方学习
http://www.cnblogs.com/wangfupeng1988/p/3988422.html

- this不是函数自身的引用,this实际上是在函数被调用时建立的一个绑定,它指向什么,完全是由函数调用者来决定的。

看一个this和new相关的例子,也能很好的说明情况:

var Person = function(name) {
// this 指向当前创建的实例   
this.name = name; }; // 实例化一个Person(通过new实例化时,此时的this指向alice这个对象.你可以打印出来测试一下) var alice = new Person('alice'); // 不要这么做!这个函数只会返回undefined,并且执行上下文是window(全局)对象,你无意间创建了一个全局变量name。
Person('bob'); //=> undefined 

 

2、new、prototype的理解

#第三方教程
http://blog.csdn.net/zhoutaohenan/article/details/8641551

var person = function () {};

var p = new person(); 

很简单的一段代码,我们来看看这个new究竟做了什么?我们可以把new的过程等价于以下三步:

   // 创建一个空对象

1、var p = {};

// 可以通过运行 alert( p.__proto__ === person.prototype ) 来验证。结果返回true

2、p.__proto__ = person.prototype;

// 通过这一步,p可以调用person中的属性或函数

3、person.call(p);

 

 当我们调用p.【属性/方法】 的时候,首先p中没有这个【属性/方法】,如果没有就会去__proto__中去找,也就是Person.prototype

 而这个 Person.prototype 称为 __proto__ 的原型

 Person.prototype事实上还有一个原型:Object.prototype,这个原型的作用是什么呢?

 我们注意到任何一个对象都具有.toString()等方法,这其实就是来源于这个原型。

 而 Object.prototype 又指向了最终一个原型,就是NULL。

 这个过程就是原型链

 js

3、js面向对象:实例方法和静态方法

什么是实例方法?简单的来说就是必须实例化类对象才可以调用的方法,如:

var people= function () {};

people.prototype = {
  init:function(){
    alert("init")
  },
  show:function(){
    alert("show")
  }
}

 //VM1008:1 Uncaught TypeError: people.init is not a function(…)
people.init() 

var p = new people();
p.init();  

什么是静态方法?不需要实例化类就可以直接调用,如:

var people = function(){};

people.test = function(){
    alert("123");
}

people.test();

 

4、js的封装闭包 

(function(){

    // declare private variables and/or functions

    return {
        // declare private variables and/or functions
    }

})()

 

5、js的设计模式

待整理...