博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原型模式
阅读量:5855 次
发布时间:2019-06-19

本文共 1898 字,大约阅读时间需要 6 分钟。

 

  首先,每一个被创建的函数都有一个 prototype (原型)属性。 这个属性是一个指针,指向一个对象,而这个对象包含了可以由特定类型的所有实例共享的属性和方法。

因此可以理解为: 通过   调用  构造函数而创建的   对象实例   的原型对象。

 

  原型对象的优势在于 可以让所有对象实例共享它所包含的属性和方法。这样就不必再构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中,

如下例所示:

function Person () {}Person.prototype.name = "wsc";Person.prototype.age = 26;Person.prototype.job = "software engineer";Person.prototype.sayName = function(){     alert(this.name);    }var person1 = new Person();person1.sayName();//"wsc"   这是直接调用原型对象Person中的sayName()函数对象;var person2 = new Person();person2.sayName();////"wsc"   这是直接调用原型对象Person中的sayName()函数对象;alert(person1.sayName == person2.sayName);//true

 

1.理解原型对象

  创建一个新函数,根据特定的规则,会自动为该函数创建一个 prototype 属性,这个属性指向函数的原型对象。

  在默认情况下,所有原型对象都会自动获得一个constructor (构造函数) 属性,这个属性是一个指向 prototype 属性所在函数的指针。那前面的例子来说,Person.prototype.constructor 指向Person.而通过这个构造函数,还可以继续为原型对象添加其他属性和方法。

  (1).创建自定义的构造函数之后,其原型对象默认只会取得constructor属性;至于其他方法,则都是从Object继承过来的。

    a.当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部属性),指向构造函数的原型对象。ECMAScript5管这个指针叫[[Prototype]]。在部分浏览器中的每个对象都支持一个属性 _proto_,这个属性存在于实例与构造函数的原型对象之间,而不是存在于实例与构造函数质检。

    b.判断对象之间是否存在这种连接关系,可以用方法:isPrototypeof() ,如下:

     alert(Person.prototype.isPrototypeof(person1));//true     alert(Person.prototype.isPrototypeof(person2));//true

    c.ECMAScript 5 增加了一个新方法,Object.getPrototypeof(),这个方法返回的值就是这个对象的原型,如:

     alert(Object.getPrototypeof(person1) == Person.prototype);//true;     alert(Object.getPrototypeof(person1).name);//"wsc"

 

  (2).实例中的属性 与对应原型中的属性 名相同时,原型中的属性回自动被屏蔽掉;用delete操作符 可以删除实例属性,从而可以重新访问原型中的属性;

  function Person () {  }  Person.prototype.name = "wsc";  Person.prototype.age = 26;  Person.prototype.job = "software engineer";  Person.prototype.sayName = function(){     alert(this.name);      }  var person1 = new Person();  var person2 = new Person();  person1.name = "wscsir";  alert(person1.name);//---来至实例  alert(person2.name);//---来至原型

 

转载于:https://www.cnblogs.com/wangshichuan/p/5891086.html

你可能感兴趣的文章
ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器
查看>>
dev gridControl 自定义绘制列头颜色
查看>>
运行时数据调试
查看>>
京东的交易系统 之 高并发架构分享
查看>>
网站大并发处理解决方案
查看>>
分布式计算
查看>>
cocoapods管理第三方开源库
查看>>
pvp实时对战,同步机制,针对掉线简单分析
查看>>
EBook
查看>>
(用了map) Registration system
查看>>
C/S架构和B/S架构的概念和区别
查看>>
知识的深度跟知识的广度
查看>>
Blue Jeans(包含两个查找字符串的重要函数)
查看>>
嵌入式软件设计第12次实验报告
查看>>
冲刺第二周第七天
查看>>
Mac中建立SVN服务器
查看>>
JS学习专辑(4)- 变量作用域和语句
查看>>
Httpclient 报 java.net.URISyntaxException 的错误
查看>>
863. All Nodes Distance K in Binary Tree
查看>>
Word 2013安裝字典
查看>>