带你彻底领略JavaScript中的原型工具(3)

​ 原型中的所有的属性都是共享的。也就是说,用同一个结构函数建设的工具去会见原型中的属性的时候,各人都是会见的同一个工具,假如一个工具对原型的属性举办了修改,则会反应到所有的工具上面。

​ 可是在实际利用中,每个工具的属性一般是差异的。张三的姓名是张三,李四的姓名是李四。

​ **可是,这个共享特性对 要领(属性值是函数的属性)又长短常符合的。**所有的工具共享要领是最佳状态。这种特性在c#和Java中是天保留在的。

3.2 结构函数模子建设工具的缺陷

​ 在结构函数中添加的属性和要领,每个工具都有本身独占的一份,各人不会共享。这个特性对属性较量符合,可是对要领又不太符合。因为对所有工具来说,他们的要领应该是一份就够了,没有须要每人一份,造成内存的挥霍和机能的低下。

<script type="text/javascript"> function Person() { this.name = "李四"; this.age = 20; this.eat = function() { alert("吃完对象"); } } var p1 = new Person(); var p2 = new Person(); //每个工具城市有差异的要领 alert(p1.eat === p2.eat); //fasle </script>

可以利用下面的要领办理:

<script type="text/javascript"> function Person() { this.name = "李四"; this.age = 20; this.eat = eat; } function eat() { alert("吃完对象"); } var p1 = new Person(); var p2 = new Person(); //因为eat属性都是赋值的同一个函数,所以是true alert(p1.eat === p2.eat); //true </script>

可是上面的这种办理要领具有致命的缺陷:封装性太差。利用面向工具,目标之一就是封装代码,这个时候为了机能又要把代码抽出工具之外,这是反人类的设计。

3.3 利用组合模式办理上述两种缺陷

​ 原型模式适合封装要领,结构函数模式适合封装属性,综合两种模式的利益就有了组合模式。

<script type="text/javascript"> //在结构要领内部封装属性 function Person(name, age) { this.name = name; this.age = age; } //在原型工具内封装要领 Person.prototype.eat = function (food) { alert(this.name + "爱吃" + food); } Person.prototype.play = function (playName) { alert(this.name + "爱玩" + playName); } var p1 = new Person("李四", 20); var p2 = new Person("张三", 30); p1.eat("苹果"); p2.eat("香蕉"); p1.play("志玲"); p2.play("凤姐"); </script>

四、动态原型模式建设工具

​ 前面讲到的组合模式,也并非完美无缺,有一点也是感受不是很完美。把结构要领和原型分隔写,总让人感受不舒服,应该想步伐把结构要领和原型封装在一起,所以就有了动态原型模式。

​ 动态原型模式把所有的属性和要领都封装在结构要领中,而仅仅在需要的时候才去在结构要领中初始化原型,又保持了同时利用结构函数和原型的利益。

看下面的代码:

<script type="text/javascript"> //结构要领内部封装属性 function Person(name, age) { //每个工具都添加本身的属性 this.name = name; this.age = age; /* 判定this.eat这个属性是不是function,假如不是function则证明是第一次建设工具, 则把这个funcion添加到原型中。 假如是function,则代表原型中已经有了这个要领,则不需要再添加。 perfect!完美办理了机能和代码的封装问题。 */ if(typeof this.eat !== "function"){ Person.prototype.eat = function () { alert(this.name + " 在吃"); } } } var p1 = new Person("志玲", 40); p1.eat(); </script>

到此这篇关于带你彻底领略JavaScript中的原型工具的文章就先容到这了,更多相关领略js原型工具内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!

您大概感乐趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjfxw.html