目前为止我认为这是最佳的声明对象的模式,将今天学到的东西写下
<script type="text/javascript"> function Constructor(obj,options){ this.selector = options.selector; this.time = options.time; this.step = options.step; this.obj = document.getElementById(obj); //私有方法,将不被共享,所以此方法在各个实例中不是不相等的 this.fuck = function(){ //code here alert('fuck'); } } //公共方法,原形继承,方法在实例中是相等的 Constructor.prototype.getName = function(){ //code here alert(this.selector); } Constructor.prototype.setName = function(){ //code here alert(this.time); } Constructor.prototype.getIndex = function(){ //code here alert(this.step); } //call继承,通过继承可以扩充实例化后的对象的作用域,call(obj,[,arr1[,arr2[,arr3]]]); //obj作为第一个参数即是this指针的指向,通过重新定义指针,可以将函数的作用域赋予继承对象中; //后面的参数为可选项,以逗号分隔开。这是与apply方法区别之处; function callFunc(a,b){ this.a = a; this.b = b; this.c = function(){ return this.a + this.b; } } //apply继承 //call继承,通过继承可以扩充实例化后的对象的作用域,call(obj,[arr1,arr2,arr3]); //obj作为第一个参数即是this指针的指向,通过重新定义指针,可以将函数的作用域赋予继承对象中; //后面的第二个参数为可选项,以数组形式存在。这是与apply方法区别之处; function applyFunc(a,b){ this.a = a; this.b = b; this.c = function(){ return this.a * this.b; } } //实例化一个对象Constructor1 var Constructor1 = new Constructor('slider',{ selector:'selector', time:2000, step:30 }); //实例化一个对象Constructor2 var Constructor2 = new Constructor('slider',{ selector:'selector', time:2000, step:30 }); console.log(Constructor1 instanceof Constructor);//true console.log(Constructor2 instanceof Constructor);//true console.log(Constructor1.fuck == Constructor2.fuck);//false //call继承callFunc中作用域 callFunc.call(Constructor1,1,2); console.log(Constructor1.c());//3 //apply继承applyFunc中作用域 applyFunc.apply(Constructor1,[3,2]); console.log(Constructor1.c());//6 </script>