`

javascript prototype

 
阅读更多

---------------------- android培训java培训、期待与您交流!----------------------

最近在看javascript的继承 有很多不明白的地方 经过大量的查阅资料

终于有了些眉目 现在我写在这里 供大家分享

首先上代码:

// JavaScript Document
Object1 = function(name,age){
  this.name = name;
  this.age = age;
  this.println = function(){
   alert("姓名是:"+this.name+",年龄是:"+this.age);
  };
}
Object2 = function(){
};
Object2.prototype = new Object1("caodaoxi",23);
obj2 = new Object2();
obj2.println();

如果我们把Object2 = {};时obj2 = new Object2();这句话会报这个错误obj2不是一个构造方法

 

下面我来谈谈prototype这个属性的含义 不一定正确 希望大家指正

在javascript里面根本没有类这个概念 也没有方法这个概念 只有属性这个概念 继承是通过prototype这个属性实现的 prototype实际上是一个 属性包 相当于java中的map集合 形式是这样的:(key,value)  每个function都有这个属性 当我们new的时候 javascript引擎会把我们放在prototype里面的键值对放进对象中

 

 

// JavaScript Document
Object1 = function(){
  this.name = "cdx";
  this.age = 25;
  this.println = function(){
   alert("姓名是:"+this.name+",年龄是:"+this.age);
  };
}
/*Object2 = function(){
};
Object2.prototype = new Object1("caodaoxi",23);
obj2 = new Object2();
obj2.println();
*/
var ob = new Object1();
/*alert(Object1.prototype.constructor.prototype.constructor);//Object1.prototype.constructor.prototype.constructor指向和Object1.prototype.constructor指向是一样的*/
Object1.prototype.name =  "账";
alert(ob.name);

 这里打印的是cdx  这是为什么呢 ?为什么没有打印“账”呢 这里不能不说一下 javascript对象创建及访问对象属性的过程了 首先我们定义一个类时(姑且叫它类吧)在对象创建之前已经给它附加了一个prototype属性对象这个对象默认开始时是空的

当我们去new这个对象时 javascript引擎会把这个prototype里的属性copy到对象中去 当我们去访问一个对象的属性或方法时时 会先去对象里找有没有这个属性或方法 如果没有会去prototype里去查找有没有这个属性或方法

把上面程序改为:

// JavaScript Document
Object1 = function(){

  this.age = 25;
  this.println = function(){
   alert("姓名是:"+this.name+",年龄是:"+this.age);
  };
}
/*Object2 = function(){
};
Object2.prototype = new Object1("caodaoxi",23);
obj2 = new Object2();
obj2.println();
*/

/*alert(Object1.prototype.constructor.prototype.constructor);//Object1.prototype.constructor.prototype.constructor指向和Object1.prototype.constructor指向是一样的*/
Object1.prototype.name =  "账";
var ob = new Object1();
alert(ob.name);

去掉this.name="cdx"

将打印“账”

下面再来一段javascript权威指南上的一段代码吧

 Circle = function(){

        this.x = 0.1;

        this.y = 0.2;

}

new Circle();

 

Circle.prototype.pi = 3.14159;

 

// JavaScript Document
Object1 = function(){
 // this.name = "曹道喜";
  this.age = 25;
  this.println = function(){
   alert("姓名是:"+this.name+",年龄是:"+this.age);
  };
}
Object2 = function(){
};
Object2.prototype.age = 26;
Object2.prototype = new Object1();//这里类似执行这样的语句 Object2.prototype = Object1.prototype 把Object的prototype直接复制到Object1的prototype里面
//如果object2的prototype里已经有一个age属性那么object2的prototype里的age将会被object1的prototype的age给覆盖掉
object2 = new Object2();
//alert(Object2.prototype.age);//这里会打印25
//alert(object2.age);//这里会打印25 因为这时对象object2还没有age这个属性 然后javascript引擎到object2 的prototype里去找age属性
//alert(Object2.constructor);
/*
Object2.prototype = new Object1("caodaoxi",23);
obj2 = new Object2();
obj2.println();
*/

/*alert(Object1.prototype.constructor.prototype.constructor);//Object1.prototype.constructor.prototype.constructor指向和Object1.prototype.constructor指向是一样的*/
//Object1.prototype.name =  "李化龙";
//var ob = new Object1();
//ob.name = "gg";//这里等于是把 object1里放进了一个name属性 而不是放进prototype里
//alert(Object1.prototype.name);//这里打印的还是李化龙
//alert(ob.name);//如果不加ob.name = "gg";打印的就是李化龙 如果加上ob.name = "gg"; 则打印gg

/*-------------------------------第二章-------------------------*/

var s = [1,2,3,4,5]
alert(s.join());//这里并没有把s = s.join();
alert(s.constructor);//还是数组
alert(s.reverse().join());

 

 <!--StartFragment -->

<!--StartFragment -->

---------------------- android培训java培训、期待与您交流!----------------------

  • 大小: 130.9 KB
分享到:
评论

相关推荐

    2024华为OD机试D卷 - 最多购买宝石数目 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    华为OD机试D卷 - 小朋友来自多少小区 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    C51单片机的示例-课程实验-LCD1602基础开发库-内含源码和说明书.zip

    C51单片机的示例-课程实验-LCD1602基础开发库-内含源码和说明书.zip

    毕业设计 基于Python+Django+itemCF和userCF算法音乐推荐系统源码+详细文档+全部数据资料 高分项目

    【资源说明】 毕业设计 基于Python+Django+itemCF和userCF算法音乐推荐系统源码+详细文档+全部数据资料 高分项目 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    setuptools-51.3.1-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于python实现通过摄像头进行手势识别并进行控制vrep仿真机械臂+源码+文档(高分优秀项目)

    基于python实现通过摄像头进行手势识别并进行控制vrep仿真机械臂+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 通过摄像头进行手势识别,控制vrep仿真机械臂 anaconda 环境部署: conda create -n py37 python=3.7 pip install opencv-python conda install tensorflow==1.13.1 conda install keras==2.2.4 conda install matplotlib pip install imutils 程序介绍: label.py 采集,制作标签数据集 model.py 定义模型 train.py 模型训练 test.py 测试手势识别结果 main.py 控制机械臂主程序 vrep.py, vrepConst.py, remoteApi.so : vrep 为 windows 提供的官方接口 puma560.ttt vrep机械臂

    setuptools-42.0.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-1.3.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    毕业设计 基于Python+Flask的知识图谱的推荐系统,音乐领域知识图谱3MKG源码+详细文档+全部数据资料 高分项目

    【资源说明】 毕业设计 基于Python+Flask的知识图谱的推荐系统,音乐领域知识图谱3MKG源码+详细文档+全部数据资料 高分项目 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    Python环形数组.docx

    环形数组

    Jira敏捷开发.pdf

    Jira敏捷开发.pdf

    十六进制转浮点数.vi

    十六进制转浮点数.vi

    华为OD机试D卷 - 掌握的单词个数 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    setuptools-32.2.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    MP4拖入压制,支持多文件拖入,可压缩至原体积的5%-20%基本无损

    MP4拖入压制,支持多文件拖入,可压缩至原体积的5%-20%基本无损,采用GCC编译,可略微增加压缩速度

    setuptools-3.6.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    2024华为OD机试D卷 - 最大矩阵和 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    setuptools-50.2.0-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    华为OD机试D卷 - 手机App防沉迷系统 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    卡通海洋0.0.5 凑11

    1,uv偏移 2,海岸线 3,海面透明度设置 4,海岸线噪音纹理(变体Shader) 5,海浪形变

Global site tag (gtag.js) - Google Analytics