一.仔细分析前面的原型模式创建对象的方法,发现原型模式创建对象,也存在一些问题,如下: 1.它省略了为构造函数传递初始化参数这个环节,结果所有实例在默认的情况下都将取得相同的属性值,这还不是最大的问题! 2.最大的问题是原型中的所有属性是被很多实例所共享的,这种共享对于函数非常合适,对于那些包含基本值的属性也说得过去,因为我们知道可以在实例上添加一个同名属性,可以隐藏原型中的对应属性.但是对于包含应用类型值的属性来说,问题就非常严重了,代码如下: function Person(){ } Per…
一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可能会感到非常困惑.因为对象在其他oo语言中往往是封装在一块的,而构造函数确是和原型分开的,所以并没有真正意义上的封装,所以动态原型模式正是致力与解决这一问题的一个方案! 动态原型模式将所有的信息都封装在构造函数中(包括原型和实例属性),通过在构造函数中实例化原型(仅在必要的情况下)实现封装,又保持了…
1.通过Object构造函数和对象字面量来创建对象缺点:使用同一个接口创建很多的对象,会产生大量的重复代码.比如我需要创建人的对象,并且需要三类人,医生.工程师.老师,他们可以抽象出很多属性,比如姓名.年龄.工作等,只是各自的值不一样,如果这里我用Object或者对象字面量来创建的话,那我必须每个人都写一次这三个属性,造成了代码重复. 2.思考下方法一的问题,我们发现我们可以通过一个工厂来创建对象,这样做的好处是,我们能把一些共同的属性封装到工厂里面,而我们创建对象时,只需要把对象的参数,传递给…
1.原型模式的重要性不仅仅体现在创建自定义类型方面,就连所有的原生的引用类型(Obejct.Array.String等等)都在构造函数的原型上定义方法和属性.如下代码可以证明: alert(typeof Array.prototype.sort); //输出:function alert(typeof String.prototype.substring); //输出:function 通过原生对象的原型,不仅可以取得所有默认方法的引用,而且可以定义新的方法.可以想修改自己定义对象的原型一样修改…
简介:继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法. 但是JS的函数并没有签名,所以在ECMAScript中无法实现接口继承.ECMAScript只支持实现继承.而且其实现继承只要是靠原型链来实现的. 1.原型链: ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法. 基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾下构造函数.原型和实例的关系:…
1.由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来---即便是先创建了实例后修改原型也是如此.代码如下: function Person(){ } var friend=new Person(); Person.prototype.sayHello=function(){ alert("Hello"); } friend.sayHello(); //输出:Hello 上面这段代码先创建了Person的一个实例,并将其保存在friend中.…
1.到目前为止,我们是时候分析下前面的使用原型语法来定义对象有哪些不足的地方,代码如下: function Person(){ } Person.prototype.name="张三"; Person.prototype.age=22; Person.prototype.job="coder"; Person.prototype.sayName=function(){ alert(this.name); } 当我们为Person对象每添加一个属性和方法,就要敲一遍P…
1.原型属性对象于in操作符之in单独使用 有两种方式使用in操作符:单独使用和在for-in循环中使用.在单独使用中,代码如下: function Person(){ } Person.prototype.name="张三"; Person.prototype.age=22; Person.prototype.job="coder"; Person.prototype.sayName=function(){ alert(this.name); } var pers…
javascript创建对象的方法--组合模式 一.总结 0.作用:解决原型模式对象独有属性创建麻烦的问题 1.组合模式使用普遍:jquery就是用的组合模式,组合模式使用非常普遍 2.组合模式优点:a.支持传参  b. 解决内存浪费(共用的函数和属性用原型方式,非共用的的函数和属性用构造函数的方式) 3.组合模式的实现:共用的函数和属性用原型方式,非共用的的函数和属性用构造函数的方式 二.javascript创建对象的方法--组合模式 构造函数和原型组合模式 这是目前最为常用的创建对象的方式.…
javascript创建对象的方法--原型模式 一.总结 1.原型模式解决内存浪费的方法(继承):通过继承,对象继承原型模式下的所有属性,对象不同于其它对象的的属性自己创建或者修改 2.原型的使用(prototype关键字):定义模型的时候在属性中加上prototype关键字就好,这里对象用的不是this,prototype关键字添加方式用的是点,例如Peopleobj.prototype.name='喽啰'; 3.缺点:构造函数没有参数 二.(Prototype)原型模式 Javascript…