<html> <body> <script type="text/javascript"> //闭包实现了函数层面多个子函数共享父类函数的属性、方法(继承)。类层面上原型实现了多个子类对象共享父类对象的属性、方法(继承)。 //函数每调用一次,就会开启一个新的内存区域让函数执行。类的成员方法也是,每调用一次就开辟一个新的内存区域。 function f1(){ var b = 1; var c = function(){alert(123);} return function(g){ b++; if(g == 0){ c = function(){alert(b);alert(456);} } c(); } } var d1 = f1();//大函数return函数模版,函数模版多次执行时地址不一样, alert("==="); d1(1);//123 alert("---"); d1(0);//3 456,改变了大函数的c alert("+++"); d1(1);//4 456,使用改变了的c var d2 = f1();//大函数return函数模版,函数模版多次执行时地址不一样, alert("==="); d2(1);//123 alert("---"); d2(0);//3 456,改变了大函数的c alert("+++"); d2(1);//4 456,使用改变了的c </script> </body> </html>
var cat = (function(){//函数嵌套,就是类中类, //私有静态属性 var AGE = 10; //私有函数 function add(x,y){ return x+y; } return function(){ //多个子类,使用外层闭包的公有的属性和方法 this.age = ++AGE; this.add = function(x,y){ //alert(age);//age is not defined return add(x,y) } this.setAge = function(age){ AGE = age; } } })() alert(new cat().add(1,2));//3,new的时候函数会执行一次 alert(new cat().age);//12 new cat().setAge(100); alert(new cat().age);//101
function Person(name , age){ this.name = name ; this.age = age ; this.sayName = function(){alert('我是姓名!')};//sayName指的是函数模型,不同对象的成员方法执行都会开辟新内存区域, } var p1 = new Person('z3',20); var p2 = new Person('z4',21); alert(p1.sayName == p2.sayName); // false
var定义的属性和方法相当于是私有的属性和方法,不同函数对象的方法的地址是不一样的。