做毕设的时候看JS学到OO就没看下去了,到现在过了这么久。当时看原型就不是很明白。前段时间看jQuery就顺带看了看原生JS,首先就是原型prototype。
prototype属性:所有javascript内部对象都有只读的prototype属性,可以向其原型中动态添加功能(属性和方法),但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。
说白了,用prototype定义的属性、方法都是静态的,而且原型属性可以作为对象的默认值,对象本身属性会覆盖同名原型属性。
ClassB.prototype = new ClassA(); //ClassB以ClassA的对象为原型 //objectB.__proto__=ClassA 对象的__proto__属性
闭包: 所谓 闭包,是动态语言才有的东西,就是函数内部有匿名函数,它能访问到被定义的作用域里的变量。
你能看懂不?
反正我是看不懂。个人理解,虽然退出外层函数了,但是由于被引用了,所以外层函数定义的变量不会被回收,子函数就可以使用父函数中的局部变量。
举个例子应该比较明白。
// A是一个普通函数 function A(a){ return a; } // B是一个带函数返回值的函数 function B(b){ return function(){ return b; } } var x=A(10);//A除了返回a什么也没做,没产生闭包 var y=B(20);//B返回了一个匿名函数引用,它访问到B()被调用时的环境,因此产生了闭包,y()返回20 var z=B(30);//z()返回30 alert("x="+x+" y()="+y()+" z()="+z());
alert的当然就是10,20,30。
闭包的用处:
1、保护函数内的变量安全。上述例子,函数B中的b只有匿名函数才能访问,而无法通过其他途径访问到,因此保护了b的安全性。
2、在内存中维持一个变量。依然如前例,由于闭包,函数B中的b一直存在于内存中,也就类似于类变量了。
总而言之原型用来实现继承,闭包用来封装。