dojo.declare说明

Dojo中类的模拟以及继承 前言 首先大家都知道JavaScript语言并没有类这个概念,它是采用一种基于原型的继承机制。在JavaScript中,每一个函数对象都有一个原型属性(prototype),这个属性指向的对象就是这个函数对象的原型对象,这个原型对象也有原型属性,以此类推,就形成了一个原型链。在JavaScript访问对象的属性时,首先在这个对象中查找有没有同门的属性,若没有,则顺着原型链一直查找,知道找到这个属... 阅读详情

 

dojo.declare说明

hanlray@gmail.com
Reversion:2.0 Date: 06/07/04

dojo.declare在dojo中被广泛使用,理解它将对弄懂dojo的代码有很大帮助。简单的说,dojo.declare提供了一种声明类的方式,通过它可以很方便的扩展其他类:

  dojo.declare("com.abc.MyDataProvider", dojo.widget.ComboBoxDataProvider,
  	{
  		name: "My DataProvider",
  		init: function() {
  			...
  		}
  	}
  );

这里类名com.abc.MyDataProvider是用字符串来表示的,dojo.widget.ComboBoxDataProvider是被扩展的基类,第三个参数是个object,用来定义该类的属性。 dojo.declare产生的类所具有的属性将是基类的属性和大括号中指定的属性的集合,如果大括号中声明了和基类同名的属性,则基类属性将被覆盖,但也有例外,下面将会说明。生成类的constructor将会调用基类的constructor,然后调用本身的initializer方法,该方法可以来类本身,也可以来自其基类,如果都没有还可以来自dojo.declare中可选的一个参数,否则将是个空函数。

如何使用产生的类呢?可以把该名字作为function类型的变量名来使用,如

  dp = new com.abc.MyDataProvider();

可见dojo.declare产生了一个指定名称的变量,引用创建出的class(function) 也可以:

  dpClass = dojo.evalObjPath("com.abc.MyDataProvider");
  dp = new dpClass();

这种方式比较适合通过类名字符串来使用该类。

1. 覆盖的问题

如果基类是这么声明的:

  dojo.widget.ComboxDataProvdier = function() {
  	this.init = function() {
  		...
  	}
  }

而我们希望com.abc.MyDataProvider里声明的init方法覆盖基类的方法,那么上面那个dojo.declare的结果是不对的,这时查看该类的一个实例,你会发现它的init属性是基类的方法。

dojo.declare先会把dojo.widget.ComboBoxDataProvider.prototype上的属性设置到com.abc.MyDataProvider.prototype上,然后再把本身声明的属性加进去,因此com.abc.MyDataProvider.prototype的init属性正是我们期望的init函数,但是当执行该类的constructor方法时,它会调用基类的constructor,因此本来设置好的init函数就被基类的init函数覆盖了,于是override失败。

这里的ComboDataProvider作为一个class,不应该在constructor里赋值init属性,这样会导致每个实例都会有一个init方法的实例,而这是没有必要的。应该用prototype来定义method属性:

  com.abc.MyDataProvider.prototype.init = function() {
  	...
  }

由此可见,用dojo.declare来override还是有个前提的,那就是要override的method必须用prototype定义,而不是在constructor里。

2. 多重继承

dojo.declare是可以扩展多个类的,如: dojo.declare("dojo.widget.html.ComboBox", dojo.widget.HtmlWidget,,

{ ... }

); 这时第一个类dojo.widget.HtmlWidget将会被作为super class,于是其prototype上的属性将会进入dojo.widget.html.ComboBox.prototype,然后其他基类prototype上的属性也会被mixin到dojo.widget.html.ComboBox.prototype,最后是类本身声明的属性。当然在constructor只会调用基类的construtor。

这有点类似java的单根继承、多个接口,不过要注意的是:如果dojo.widget.HtmlWidget和dojo.widget.ComboBox同时声明了一个函数属性,那么产生的类将会具有dojo.widget.ComboBox里声明的函数,这时如果dojo.widget.ComboBox因为是一个接口类而把该属性声明为空函数,而你希望继承的是dojo.widget.HtmlWidget上该方法的实现,那么结果就不对了,你得到的类的该方法将是dojo.widget.ComboBox上的声明的空函数。

Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程 本文主要介绍了Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装Node.js 2.2 步骤二:安装git 2.3 步骤三:安装并配置OpenClaw 2.4 步骤四:配置OpenClaw 2.5 步骤五:配置模型 2.6 步骤六:对话 3. 后续使用步骤 4. 报错解决方案 5. OpenClaw的卸载 阅读详情

相关推荐

国产射频直采收发器CX8242KA JESD204C调试

杭州诚芯公司的CX8242KA是国内开发的极少数支持JESD204C接口的高速AD、DA,Serdes具备支持接收和发送,并且速率可以到25Gbps,在国内属于领先水平。250M参考时钟输入,AD采样率2.5G,DA采样率10G,3收2发,主通道模式4,反馈通道模式1,基带采样率1250M,线速率20.625G,收发同时配置混频625M。CX8242KA的204C接口模式支持10种模式,在手册上都有说明。2、 支持TX信道编码,RX信道解码,提升健壮性。这里使用模式4,支持双通道模式,并且反馈开启。

RFSOC的博客 6220

dojo.declare函数详述(转载)

dojo.declare在dojo中被广泛使用,理解它将对弄懂dojo的代码有很大帮助。简单的说,dojo.declare提供了一种声明类的方式,通过它可以很方便的扩展其他类:   dojo.declare("com.abc.MyDataProvider", dojo.widget.ComboBoxDataProvider,   {    name: "My DataProvider",   

一室阳光,温暖你我他! 1510

减小伺服电机共振的方法(以松下伺服为例)

嘿 ! 我是【小黄】 , 我们又见面啦 !!! 毕竟技术只有大家交流才会进步嘛 ! 这博客是对自己学习的一点点记录和总结 ,如果您对自动控制感兴趣的话 ,可以关注一下我的动态 , 我们一起学习呀 ! 我们都还年轻 ,我们还有无限可能 。 YES ! 减小伺服电机共振的方法(以松下伺服为例)1. 准备工作:1.1.1 如何推定共振点:1.1.2 测定实操:1.1.3 总结:2. 下期预告: 在我们调试完伺服参数以后机器人运动到某个特定位置会产生振动或异响,我们要做的就是消除这个异响保..

在下小黄的博客 1万+

(3)Dojo学习之Class

引言 dojo中的类 1创建一个简单的类 2类和模块结合使用 3关于类的继承 需求 1需求一 2需求二很重要 21代码实现 22程序出错 23程序运行 3 需求三 再次介绍require加载模块 总结 1本博客代码的下载地址dojo_class1.引言      说到面向对象,我们就不得不提一下类,在原生的js中我们是不可以创建类的,没有class这个关键字,但是在dojo中,dojo自定义了一个模

王培晓Carpenter 4158

libiec61850实战:手把手教你用C语言动态获取IED设备模型(附完整代码解析)

本文详细介绍了如何使用libiec61850库通过C语言动态获取IED设备模型,包括环境配置、连接建立、模型遍历及错误处理等关键步骤。通过完整的代码示例和实战案例,帮助开发者掌握智能变电站通信中的核心技术,提升工业自动化系统的开发效率。

weixin_42519985的博客 434

Orange Pi 3B+刷入EmuELEC全过程:手把手教程

手把手教你如何在Orange Pi 3B+上成功刷入emuelec系统,涵盖烧录工具、镜像下载到启动设置的完整流程,让复古游戏体验轻松实现。

weixin_35732273的博客 1094

面向对象的 JavaScript 编程:dojo.declare 详解

引言 JavaScript 早在发明初期时,仅用来进行简单的表单数据验证,但随着 Web 2.0 技术的蓬勃发展,尤其是近年来 Ajax 的异军突起,JavaScript 如今已成为 Internet 上最流行的脚本语言,用其开发的 web 应用也因高互动性极大的丰富了用户体验。而与此同时,当前的富英特网应用程序的代码量也产生了爆炸式的增长,因此利用面向对象的 JavaScript 编程,...

zhenaikeke 371

FlowDroid高级技巧:从基础配置到精准Android静态污点分析实战

静态污点分析是软件安全领域的核心技术,通过追踪数据在程序中的流动路径,识别潜在的隐私泄露与安全漏洞。其原理基于控制流与数据流分析,构建程序执行模型,模拟敏感信息从源头到汇聚点的传播过程。这项技术的核心价值在于能在不运行代码的情况下,系统性地发现隐蔽的数据流问题,为应用安全提供前置保障。在Android应用安全审计、合规检测等场景中,静态污点分析工具如FlowDroid已成为发现数据泄露、硬编码密钥等问题的标准手段。本文聚焦于FlowDroid的高级实战应用,深入探讨如何通过优化配置、调参策略及结果分析,将这

weixin_29324401的博客 367

DOJO 基本原理 之 dojo/_base/declare<7>

在Dojo 工具箱中, dojo/_base/declare模块是创建类的基础。 declare允许开发者实现类多继承,从而创建有弹性的(灵活的)代码, 避免写重复的代码。 Dojo, Digit, Dojox模块都使用了declare.  在这个指南中,你将知道你为什么也需要它。 开始 在开始之前你需要先看看 modules 指南 . Dojo类创建的基础 declare 函

robin xiong的专栏 3063

用ESP32-S3和USB摄像头DIY一个无线图传监控(附完整代码和接线图)

本文详细介绍了如何利用ESP32-S3开发板和USB摄像头打造一套高性价比的无线图传监控系统。从硬件选型、接线图到代码实现,提供了完整的DIY方案,特别适合家庭监控、宠物看护等场景。通过优化WiFi传输和双核任务分配,实现了稳定的视频流传输,整套方案成本控制在200元以内。

weixin_33701251的博客 519

电路设计仿真软件:Mentor Graphics_(11).MentorGraphics软件操作与技巧

/ 定义自定义仿真命令// 加载设计文件// 运行仿真// 主函数return 1;return 0;// 自定义设计检查// 获取设计中的所有模块// 遍历所有模块// 检查模块名称是否符合规范if (!// 检查模块中的所有引脚if (!// 主函数main() {通过本节的学习,您应该已经掌握了如何在 Mentor Graphics 中进行二次开发,包括使用 Tcl、C++ 和 Python 进行基本和高级操作。

kkchenjj的博客 1639

使用dojo.declare进行组件化开发

就比如弹出层组件,你可能需要可以拖动,可以resize,可以变成确认框,可以变成提示框,可以加载远程文件,可以嵌入iframe等等。其他的功能都是在此基础上进行的扩展,想通了这一点我们就可以使用dojo.declare进行优雅的编码了。所有的dijit小部件都建立在dojo.declare的基础上,得益于dojo.declare的强大的功能,很容易进行组件开发。我们要在基类的基础上增加可以远程装载页面的功能。组件的每个部分都是模块,我只希望使用我需要的部分,这样的话就必须将代码之间的耦合降低。

liuliuhelingdao的博客 271

【AI智能体】Codex 插件从使用到项目开发实战操作详解

Codex 插件从使用到项目开发实战操作详解

congge 7642

Classy JavaScript with dojo.declare

Classy JavaScript with dojo.declare dojo.declare方法是Dojo工具包中类创建的基础。dojo.declare允许多重继承,允许开发人员创建灵活的代码,避免编写相同的代码例程。Dojo,Dijit 模块都是使用dojo.declare的。在这个教程中。您将了解为什么你也应该这么做。 Getting Started 在深入dojo.declar

511

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

web前端之dojo实际应用及开发四:面向对象开发[关键](附有源码)

web前端之dojo实际应用及开发四:面向对象开发[关键](附有源码) 常用 OOP 术语 为最大限度地利用本文,您至少应该熟悉面向对象编程及其概念。下面简要描述讨论面向对象开发时使用的一些常用术语。需要说明的是,并非所有 OOP 类型都包含每个概念;例如,基于原型的对象语言(比如 JavaScript)中就没有 “类”。 类 在基于类的面向对象开发中,一个类定义组成一个对象的不同属性和函

爸爸去哪了2之熊猫三胞胎的博客 1379

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

在 ArcGIS JS 4.16后构造新类(4.16后)

前言 ArcGIS 4.16版本之后正式移除了 dojo 中的declare 模块。这导致了早期版本想要实现类的构造需要使用新的方法。 ArcGIS 中的发布笔记如下 实现方法 其中包括了几种情况: 无构造器 有构造器 有继承关系 无使用构造器 对于没有使用构造器的新类,不涉及 declare 模块。如果在原先的代码中有引入该模块但没使用的话,只需要将其删除即可 (ps:我在使用编程过程中,即使没用到也会应用 declare 模块,导致运行时提示无法找到模块对应的 declare.js ),可能还有很

greatathrun的博客 526

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

dojo.declare 详解

dojo.declare在dojo中被广泛使用,理解它将对弄懂dojo的代码有很大帮助。简单的说,dojo.declare提供了一种声明类的方式,通过它可以很方便的扩展其他类:   dojo.declare("com.abc.MyDataProvider", dojo.widget.ComboBoxDataProvider,    {     name: "My DataProvider

Mr__XiaoBai的专栏 1879

Dojo面向对象机制深入剖析

Dojo是一个强大的基于javascript语言的web控件库,他提供了一种基于javascript的面向对象开发编码模式,使得善于于运用面向对象思维coding的我们在写比较复杂的前端web2.0应用的时候,也可以避开javascript语言的不足,写出漂亮的面向对象风格的前端代码,dojo的这个特性使得web工程师们开发web2.0应用显得更加得心应手,尤其是开发大型的web2.0应用,可以极大的提高代码的可读性和可维护性。本文主要和大家探讨一下dojo的这种面向对象的机制。

Dojo中文博客 6976

dojo.declare,dojo.define,dojo.require解释

转载自http://blog.chinaunix.net/uid-27024249-id-4023752.htmldojo.declare在dojo中被广泛使用,理解它将对弄懂dojo的代码有很大帮助。简单的说,dojo.declare提供了一种声明类的方式,通过它可以很方便的扩展其他类:dojo.declare("com.abc.MyDataProvider"/*类名*/,...

weixin_34005042的博客 430

dojo的API功能介绍

文章目录一、dojo常见API1、dojo/_base/declare(1)作用:该模块用于声明一个类,类似于js 的class的作用。(2)用法:declare(className, superClass, properties)(3)案例(4)参考链接2、dojo/_base/lang(1)作用:就是一个扩展模块,提供了一些有用的方法(2)用法:部分函数说明(3)案例(4)参考链接3、dojo/_base/array(1)作用:封装了数组中的一些方法。类似于JS当中数组(2)用法:跟JS的数组的方法使用

Litt_White的博客 2840

Dojo,Dijit基本内容总结

dojo.declare dojo.declare在dojo中被广泛使用,理解它将对弄懂dojo的代码有很大帮助。简单的说,dojo.declare提供了一种声明类的方式,通过它可以很方便的扩展其他类: dojo.declare("com.abc.MyDataProvider", dojo.widget.ComboBoxDataProvider, { name: "My Da

笨得很想飞的专栏 1449

部分Dojo常用函数简介(二)——面向对象(OO)及包机制(package system)

每个Ajax 框架都对Javascript 做了扩展,提供了很多常用函数,增强了 Javascript 的开发效率。在这里将对部分Dojo 中的常用函数做简单的介绍。由于Dojo的常用函数较多,也为方便大家阅读,将这些常用函数分为了五个类别分别进行介绍。本文将介绍第二部分的内容:面向对象(OO)及包机制(package system)常用函数。

Dojo中文博客 8366

dojo源码阅读之declare

dojo是一个开源的javascript 类库,它提供了一个declare函数来方便的实现多重继承。下面看下declare的实现原理。1, 使用declare声明一个类(未继承其他类的类)。let Human = declare([], { name: "", constructor:function(args){ for(let i in args) { ...

杨传龙的专栏 483

Dojo中define和declare

Define 先看define。作用是定义一个模块(module)。这个模块可以被require引用,引用了之后就可以使用define里面的东西。一个模块想当然,里面干什么事情,不一定全部自己实现。就像人要coding,除了脑子,也不能没有电脑、键盘。因此,define的第一个参数就是将要用到的其他模块引进来。第二个参数描述这个模块具体干什么,并且给第一个参数中的模块分别起一个朗朗上口的名字。就像...

挣钱花388的博客 346

Dojo 1.6 官方教程: 创建自定义Dojo小部件(Widget)

在这个教程中,我们将会演示如何利用Dojo 和Dijit框架来创建自定义的小部件。 主要会使用到dijit._Widget 和dijit._Templated 基类和mixin。 对dijit框架的基础知识,可以参看前两篇教程 难度:中等 适用Dojo版本: 1.6

Dojo中文博客 1万+
上一篇: Javascript入门
下一篇: emacs学习笔记
hansoft
博客等级 码龄23年 6粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值