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
#幕课网:创建对象和原型链
http://www.imooc.com/video/6001
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。
这个过程就是原型链
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的设计模式
待整理...