javascript 函数属性prototype(转)

在JavaScript中并没有类的概念,但javascript中的确可以实现重载,多态,继承。这些实现其实方法都可以用JavaScript中的引用和变量作用域结合prototype来解释。

1、prototype 
在JavaScript中并没有类的概念,但JavaScript中的确可以实现重载,多态,继承。这些实现其实方法都可以用JavaScript中的引用和变量作用域结合prototype来解释。

2、简单的例子 

复制代码 代码如下:

[javascript] view plaincopy
  1. var Blog = function( name, url ){  
  2. this.name = name;  
  3. this.url = url;  
  4. };  
  5. Blog.prototype.jumpurl = '';  
  6. Blog.prototype.jump = function(){  
  7. window.location = this.jumpurl;  
  8. };  
  9. /* 
  10. *等同于 
  11. Blog.prototype = { 
  12. jumpurl : '', 
  13. jump : function(){ 
  14. window.location = this.jumpurl; 
  15. }; 
  16. */  
  17. var rainman = new Blog('jb51', 'http://www.jb51.net');  
  18. var test = new Blog('server', 'http://s.jb51.net');   



这是一个非常简单的例子,但却可以很好的解释prototype内在的一些东西,先看下图的内存分配: 

通过上图可以看到下面这些内容: 

prototype只是函数的一个属性,该属性的类型是一个对象。 
内存分配状况: 
函数Blog拥有一个prototype属性,而prototype属性拥有一个变量和一个函数; 
test和rainman两个变量都分别有name和url两个变量; 
test和rainman两个变量都有一个jumpUrl变量和一个jump函数,但是并没有分配内存,它们是对Blog.protype中的引用 

3、扩展1: 

复制代码 代码如下:

[javascript] view plaincopy
  1. Website.prototype = Blog.prototype  
  2. var Blog = function( name, url ){  
  3. this.name = name;  
  4. this.url = blogurl;  
  5. };  
  6. Blog.prototype.jumpurl = '';  
  7. Blog.prototype.jump = function(){  
  8. window.location = this.jumpurl;  
  9. };  
  10. var rainman = new Blog('jb51', 'http://www.jb51.net');  
  11. var test = new Blog('server', 'http://s.jb51.net');  
  12.   
  13. var Website = function(){};  
  14. Website.prototype = Blog.prototype;  
  15. var mysite = new Website();   




通过上图可以看到下面这些内容: 

"Website.prototype = Blog.prototype;":Website的prototype并没有分配内存,只是引用了Blog的prototype属性。
mysite的两个属性也没有分配内存,也只是分别引用了Blog.prototype.jumpurl和Blog.prototype.jump 


4、扩展2: 

复制代码 代码如下:

[javascript] view plaincopy
  1. Website.prototype = new Blog()  
  2. var Blog = function(){};  
  3. Blog.prototype.jumpurl = '';  
  4. Blog.prototype.jump = function(){  
  5. window.location = this.jumpurl;  
  6. };  
  7.   
  8. var Website = function(){};  
  9. Website.prototype = new Blog();  
  10. var mysite = new Website();   




通过上图可以看到下面这些内容: 

Website的prototype属性,只是Blog的一个实例( 同rainman=new Blog(); );因此Website的prototype属性就具有了jumpurl变量和jump方法了。
mysite是Website的一个实例,它的jumpurl和jump方法是继承自Website的prototype,而Web.prototype继承自Blog.prototype(这里与其说是继承,不如说是引用)
整段程序在运行的过程中,内存中只分配了一个jumpurl变量和一个jump方法 
5、new运算符 
JavaScript中new运算符。 
JavaScript中new运算符是创建一个新对象。使用方法: 
new constructor[(arguments)] 
其中constructor是必选项。对象的构造函数。如果构造函数没有参数,则可以省略圆括号。 
arguments是可选项。任意传递给新对象构造函数的参数。 

JavaScript中new运算符说明 
new 运算符执行下面的任务: 
创建一个没有成员的对象。 
为那个对象调用构造函数,传递一个指针给新创建的对象作为 this 指针。 
然后构造函数根据传递给它的参数初始化该对象。 
示例 
下面这些是有效的 new 运算符的用法例子。 
my_object = new Object; 
my_array = new Array(); 
my_date = new Date("Jan 5 1996");

6、其它 

在绝大多数JavaScript版本中,js引擎都会给每个函数一个空的原型对象,即prototype属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下python版本升级,linux下升级python版本

linux下升级python版本下载python最新版本2.7.13并编译安装wget https://www.python.org/ftp/python/2.7.12/Python-2.7.13.tar.xzxz -d Python-2.7.13.tar.xztar xf Python-2.7.13.tarcd Python-2.7.13./configure --prefix/usr/local/python-2.7.13makemake installPython-2.…

java离职交接文档_财务人员工作交接你知道么?没处理好不止将来风险大还可能违法...

今天给大家分享一下在工作中,财务人员应该怎么保护自己?1.虚假报销那些事儿在企业内部报销程序中,部分管理人员往往安排下属或助理经办报销程序,所有的费用申请、报销单据的填写均系下属完成,而一旦虚假报销案件浮出水…

iOS方法类:CGAffineTransform

iOS方法类:CGAffineTransform的使用大概 CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放、旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTran…

SQL Server 数据库没有有效所有者的三种解决办法

问题描述: 开发的过程中,操作系统出了问题,决定重装系统。但是没有将SQL Server中的数据库文件分离出来,直接将系统格了。在新系统数据库中附加了数据库文件,一切还算正常,但当打开数据库关系图的时候出现了问题,如下图所示: 针对以上问题,网上有很多解决办法,但是由…

IOS之学习笔记六(可变形参)

1、实现函数的可变形参 1)、va_list:这是一个可变类型,用于定义指向可变参数列表的指针变量 2)、va_start:让argList指向一个可变参数列表的第一个参数 3)、提取argList当前指针指向的参数,并且将指针指向下一个参数 4)、释放a…

Javascript:原型模式类继承

原型模式每个函数(准确说不是类、对象)都有一个prototype属性,这个属性是一个指针,指向一个对象。使用原型对象的好处是可以让所有对象实例共享它包含的属性和方法。1.原型对象(1)当创建一个新函数&#xf…

C# 学习经验分享

NET 20 周年的学习挑战赛刚结束了第⼀阶段,不知道各位⼩伙伴参加了没有?有⼈问现在学习 C# 是不是有点过时?也有⼈问现在C# 能做什么?更有⼈问学习 C# 能否找到⼯作 ?或者你从不同的专家,不同的从业者可以有…

ARM再出手,软银攀登新高山

当下秋意渐浓,那场贯穿整个夏季,引起舆论热潮的软银收购英国芯片巨头ARM案,总算于本月初尘埃落定。 然而时过未半月,易主后的ARM 9月20日宣布推出最新处理器Cortex-R52,官方强调这款具备先进安全特性的实时处理器将主要…

有限服务器延时计算_机房设备功率统计,UPS不间断电源和蓄电池的计算选择

当然了,也可以不用这么麻烦,网上有UPS计算器的,输入条件直接求个结果就行了。弱电笔记|弱电(安防)计算器诺,就上面那个!下面进入正文:一个计算机机房有4台PC机&#xff0…

linux把2块盘挂到一个分区,linux系统如何挂载第二块硬盘

云主机有两块硬盘,第一块硬盘盘一般为10G,用于安装系统,第二块磁盘根据云主机类型不同,大小也不相同。我们建议您在使用的时候第二块硬盘作为数据盘,存放你的网站数据,这样在您恢复系统的时候,数…

JavaScript:改变li前缀图片和样式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>无标题文档…

Visual Studio/SQL Server系统开发常见问题归纳

问题1.在利用C Sharp(操作系统为Windows7 64位)将Excel数据导入到SQL Server 2005中时,出现如下提示: 解决办法:VS菜单栏 生成→“配置管理器→平台→新建→x86。

IOS学习笔记七之KVC和Key路径

1、KVC介绍 1&#xff09;、KVC是由NSKeyValueCoding协议提供支持最基本的属性和两个方法如下 setValue:属性值 forkey:属性名&#xff1a;为指定属性设置值 valueForKey:属性名 &#xff08;得到或者指定属性的值&#xff09; 2&#xff09;、当设置value为nil的时候&am…

Xamarin效果第十八篇之GIS中复合型Mark

在前面一篇文章中简单在GIS上添加了最基础的Mark,今天再次分享一下早几天摸索的复合型Mark;啥也不说了都在效果里:1、关于数据我就是直接抓的高德的(至于后面需要的参数那就自行抓):https://restapi.amap.com/v3/airquality/aqilist?2、至于Mark无非就是用了CompositeSymbol:C…

Cent OS yum 安装 Adobe flash player

Cent OS yum 安装 Adobe flash player 桌面打开浏览器访问&#xff1a;http://get.adobe.com/cn/flashplayer/。网页会判断操作系统和浏览器并下载 Flash Player&#xff08;支持Firefox浏览器&#xff09;。 或者直接下载&#xff1a; i386系统 wget http://linuxdownload.ado…

WPF定时刷新UI界面

代码&#xff1a; using NHibernate.Criterion; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Threading; using System.Wi…

找不到libmmd.dll无法继续执行代码_300 行代码带你秒懂 Java 多线程!| 原力计划...

作者 | 永远在路上【】责编 | 胡巍巍出品 | CSDN博客线程线程的概念&#xff0c;百度是这样解释的&#xff1a;线程(英语&#xff1a;Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的…

《C prime plus (第五版)》 ---第11章 字符串和字符串函数---4

字符串的例子&#xff1a; 1.字符串排序&#xff1a; 应用范围&#xff1a;准备花名册&#xff0c;建立索引以及很多情况下都会用刀字符串的排序。这个程序的主要工具就是strcmp(). 算法&#xff1a;读一个字符串数组&#xff0c;对它们进行排序并输出。 #include<stdio.h&g…

linux系统中scanf函数,Linux下scanf宽度控制问题

scanf在不同编译器上传参顺序不一样&#xff0c;大部分都自右向左 &#xff0c;但有些编译器我无法找到规律scanf("%3c%2c",&ch1,&ch2);printf("%c,%c",ch1,ch2);以上两句执行输入&#xff1a;abcde在VC&#xff0c;TC 这两个编译器上都能正常输出…

SQL Server 编写自动增长的字符串型主键

1、编写标量值函数ICONVERT2STRING CREATE FUNCTION ICONVERT2STRING(@N INT,@F INT) RETURNS VARCHAR(10) AS BEGIN DECLARE @M INT DECLARE @L0 INT DECLARE @CH VARCHAR(10) DECLARE @ST VARCHAR(20) SELECT @CH= SELECT @ST=CONVERT(VARCHAR(10),@N) SELECT @ST=RTRIM(@ST)…