JavaScript抽象类及Class.create备忘

我们知道抽象在面向对象中的重要地位。
而JavaScript虽不是一门户严格意义上的面向对象语言,但,它也可以有自己的面向对象实现。
当然包括抽象。
在JavaScript中,虚方法可以看作该类中没有定义的方法,但已经通过this指针使用了.
通过下面的示例可以看出:
 1None.gifvar tmp=function()
 2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 3ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif{
 4InBlock.gif     this.ini.apply(this,arguments); 
 5InBlock.gif   //这里的arguments是构造函数的
 6InBlock.gif//this.ini通过this调用,但却是未定义的。
 7InBlock.gif//将在其prototype中给出实现
 8ExpandedSubBlockEnd.gif  }

 9ExpandedBlockEnd.gif}

10None.gif//实现虚方法 ini,且提供给构造函数调用
11None.giftmp.prototype.ini=function()
12ExpandedBlockStart.gifContractedBlock.gifdot.gif{
13InBlock.gif  alert(arguments[0]);
14ExpandedBlockEnd.gif}

15None.gifvar tt=new tmp('a');

在prototype.js中,对抽象类及类的创建有一段经典的实现:
如下:
 1 var Class=
 2 {
 3   create:function()
 4   {
 5     return function()  //返回一个匿名函数,也就是一个函数对象
 6     {      
 7        this.ini.apply(this,arguments);  //此时的arguments是函数对象的构造函数传递过来的参数对象
 8     }
 9   }
10 }
11 
12 var tmp=Class.create();
13 
14 //此时tmp相当于
15 //var tmp=function()
16 //{
17 //  this.ini.apply(this,arguments);
18 //}
19 //可以通过alert(tmp.toString());看出
20 tmp.prototype.ini=function()
21 {
22       alert(arguments.length);  //这里的arguments是ini自身的参数
23 }
24 var ttt=new tmp('adf');

因为掉入了面向对象的泥潭,导致对Class.create居然久久不能明了
很汗,一个简单的返回匿名函数居然将我迷糊了很久。
因此如上代码记录在此,以作备忘

转载于:https://www.cnblogs.com/McJeremy/archive/2009/01/14/1375779.html

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

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

相关文章

人工脑连接体:类脑人工智能的奇点时刻来临

来源:华春雷科学网博客最近,Mindputer实验室制造出世界首个“人工脑连接体”(True-Brain)的信息刚刚发布(详见《会议通报:中国Mindputer实验室首次造出人工脑连接体》。做为一个高前沿性的专业技术概念&…

python列表用来有序存放一组_python入门第二课------列表

1. 列表可以用来存储字符,数字等信息在geany(文本编辑器也可以直接在python终端输入)里输入以下内容:equipment[train,car,plane] /* equipment是列表的名称,中括号内是列表的元素print(equipment) /*输出列表内…

电脑、手机 自动化 键鼠操作( 类似按键精灵 )

有没有和按键精灵类似的脚本软件 ??:https://www.zhihu.com/question/342937346 AutomateIt、Automate、按键精灵、AutoJS…等Android自动化工具有什么特点?:https://www.zhihu.com/question/59503646 按键精灵系列软…

Java加密与解密的艺术~数字证书详解

数字证书具备常规加密/解密必要的信息,包含签名算法,可用于网络数据加密/解密交互,标识网络用户(计算机)身份。数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载体。依靠数字…

Learn X in Y minutes

From : http://geek.csdn.net/news/detail/125208 Learn X in Y minutes:https://learnxinyminutes.com/ learnxinyminutes.com,这是一个由社区驱动的语言风暴网站,含有很多语言的快速入门和示例,能够让你在短短几分钟之内了解一…

学界 | DeepMind论文解读:通过删除神经元来了解深度学习

作者:杨文深度神经网络由许多单独的神经元组成,它们以复杂且违反人直觉的方式组合起来,以解决各种具有挑战性的任务。这种复杂性一方面赋予神经网络神秘力量,另一方面,也让它们变成了人类难懂的黑匣子。了解神经网络的…

python动态验证码_Python 模拟生成动态产生验证码图片的方法

模拟动态产生验证码图片模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理。这里介绍一下 Python 提供的 Pillow 模块。PillowPIL:Python Image Library,Python 的图像处理标准库,功能强大。PIL 是第…

图解 CSS (1): 先做一个样式表测试工具

一直没有把样式表系统一下, 春节假期有空, 不能再等了.为了方便学习, 先写了一个样式表测试工具: CssTest(点击下载)工具非常简单, 写了 10 行左右的代码; 运行效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, …

Java加密与解密的艺术~数字证书~模型分析

1、证书签发 数字证书需要经由认证机构签发,其流程如图: 数字证书的颁发流程可简述为如下过程: 1)、由数字证书需求方产生自己的密钥对。 2)、由数字证书需求方将算法、公钥和证书申请者身份信息传送给认证机构。…

公告!2018年度国家科技奖提名公示,信息科学组获47项提名

作者:杨文3 月 23 日,国家科学技术奖励工作办公室发布第 89 号公告:2018 年度国家科学技术奖提名工作已结束,共收到有关单位和专家提名的国家自然科学奖项目 272 项,技术发明奖项目 306 项 (通用项目 247 项&#xff0…

Python 虚拟环境

参考:http://www.cnblogs.com/wilber2013/p/4774022.html virtualenv documentation: https://virtualenv.pypa.io/en/latest/ virtualenvwrapper documentation: http://virtualenvwrapper.readthedocs.org/en/latest/http://docs.python-guide.org/en/latest/dev/…

mesos marathon mysql_Mesos和Marathon简介

Mesos是apache的开源项目,是使用C开发的资源管理框架。假设我们的数据中心有众多的服务器,这些服务器要运行业务程序,业务程序随着业务规模的增加往往需要扩容,在运维层面会遇到的问题是,运维无法准确把握资源分配是否…

5.4. Interaction Between Devices and Kernel 设备与内核的交互

目录:http://www.cnblogs.com/WuCountry/archive/2008/11/15/1333960.html [不提供插图,读者最好从网上下载源书] 5.4. Interaction Between Devices and Kernel 设备与内核的交互Nearly all devices (including NICs) interact with the kernel in …

Java加密与解密的艺术~数字证书~证书管理

证书管理 keytool命令 echo 生成本地数字证书1 keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36000 -alias www.zlex.org -keystore zlex.keystore -storepass 123456echo 生成本地数字证书2 keytool -genkeypair -keyalg RSA -keysize 2048…

VR变革已来!华为完成业界首个5G实验网下Cloud VR业务验证

来源:智吧网近日,华为、北京传送科技有限公司(TPCAST)联合完成业界首个5G实验网下Cloud VR业务验证,实现了交互式CG(Computer Graphics)VR内容的实时云端渲染。何以见得这足以被历史铭记&#x…

mysql中when用法_Mysql 中的CASE WHEN 用法

在SELECT语句查询中可以使用CASE WHEN对查询出来的结果,进行一个类似于if else的判断。具体的用法1.SELECT a.website_id, b.customer_name, a.website_enddate, c.member_name, d.websitetype_id,CASEWHEN d.websitetype_id1 THEN 400WHEN d.websitetype_id2 THEN …

华为交换机CPU SNMP OID [简单整理]

华为交换机SNMP OID 内存 1.3.6.1.4.1.2011.6.1.2.1.1.3 1.3.6.1.4.1.2011.6.1.2.1.1.2 CPU 1.3.6.1.4.1.2011.6.1.1.1.3 1.3.6.1.4.1.2011.6.1.1.1.4 华为S3526E、3050C、3026E的CPU的OID: 1.3.6.1.4.1.2011.6.1.1.1.2.0(最近5秒钟&…

Java加密与解密的艺术~数字证书~证书使用keytool

证书工具 /*** 2009-5-20*/ package org.zlex.chapter10_1;import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.cert.Certificate; i…

预测|十张图带你了解2018年机器人行业趋势与前景

来源:前瞻产业研究院3月15日,腾讯对外公布了其2018年在AI领域的三大核心战略,其中包括成立机器人实验室“Robotics X”。当然,腾讯并不是唯一一家展开行动的互联网巨头,“三巨头”中的另外两家——百度和阿里&#xff…

ASP.NET2.0-防止同一用户同时登陆

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了&#…