博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript中的原型prototype
阅读量:6879 次
发布时间:2019-06-27

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

prototype属性可算是JavaScript与其他面向对象语言的一大不同之处。

简而言之,prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加属性和方法,以便在JavaScript中实现“继承”的效果。 

通过以此函数作为构造函数构造出来的对象都自动的拥有构造函数的prototype对象的成员属性和方法。

其中的要点是:

  1. prototype是函数(function)的一个必备属性(书面一点的说法是"保留属性")(只要是function,就一定有一个prototype属性)
  2. prototype的值是一个对象
  3. 可以任意修改函数的prototype属性的值。
  4. 一个对象会自动拥有这个对象的构造函数的prototype的成员属性和方法。

创建对象:

对于Object对象,可以使用对象字面量(Object literal)来创建,例如:

var foo = {    x: 10,    y: 20};

javascript中的每个对象都隐式含有一个[[prototype]]属性,这是ECMAScript中的记法,目前各大浏览器厂商在实现自己的javascript解释器时,采用的记法是__proto__,也就是说每个对象都隐式包含一个__proto__属性。

 

当有多个对象时,通过__proto__属性就能够形成一条原型链。看下面的例子:

var a = {    x: 10,    calculate: function (z) {        return this.x + this.y + z;    }};var b = {    y: 20,    __proto__: a};var c = {    y: 30,    __proto__: a};// call the inherited methodb.calculate(30); // 60c.calculate(40); // 80

上面的代码在声明对象b、c时,指明了它们的原型为对象a(a的原型默认指向Object.prototye,Object.prototype这个对象的原型指向null),这几个对象在内存中的结构大致是这样的:

prototype-chain

 

除了我们这里说的__proto__属性,相信大家平常更常见的是prototype属性。

javascript的每个对象都有__proto__属性,但是只有函数对象prototype属性。

那么在函数对象中, 这两个属性的有什么区别呢?

  1. __proto__表示该函数对象的原型
  2. prototype表示使用new来执行该函数时(这种函数一般成为构造函数),新创建的对象的原型。

 

 

 

 

 

转载于:https://www.cnblogs.com/eaysun/p/4422070.html

你可能感兴趣的文章
CentOS6.5下安装tomcat7
查看>>
为程序设置超时
查看>>
通过持续ping来检测网络质量
查看>>
Android常用的一些服务demo源码
查看>>
最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。
查看>>
详细探究Spark的shuffle实现
查看>>
云桌面技术展望
查看>>
openstack 制作winserver2008_R2镜像 用cloudbase-init 实现第一次创建就注入密码(需登录)...
查看>>
Tengine (淘宝nginx ) + tomcat 安装整合 后篇+ 高可用和负载均衡
查看>>
『AngularJS』创建 Service
查看>>
linux 修改桌面背景
查看>>
Quick Test Professional(UFT)Web Service 测试入门
查看>>
Ubuntu上手动安装sbt
查看>>
facebook首席运营谈成功经验
查看>>
资本倍增
查看>>
DataQL 的表达式编译(自创的一种表达式编译算法)
查看>>
9.29PMP每日一题
查看>>
ORACLE 学习笔记1
查看>>
vmware格式转换
查看>>
beego mysql in查询
查看>>