javascript - DOJO 声明中可选的 className 参数有什么用?

标签 javascript dojo

DOJO 中 declare(className,superclass,props) 中的 className 有什么用。

在下面的示例中,我尝试在使用 in-heritage 时使用 className。

http://jsfiddle.net/mosnpm27/

传递 className 时,我收到错误。

declare(className,superclass,props);

className Optional
The optional name of the constructor (loosely, a "class") stored in the "declaredClass" property in the created prototype. It will be used as a global name for a created constructor.
<小时/>
require(["dojo/_base/declare"], function(declare) {
    var Mammal = declare('Mammal',null, {
        constructor: function(name) {
            this.name = name;  
        },
        sayName: function() {
            console.log(this.name);
        }
    });
    var Dog = declare('Dog', Mammal, {
        makeNoise: function() {
            console.log("Waf waf");
        }
    });

    var myDog = new Dog("Pluto");
    myDog.sayName();
    myDog.makeNoise();

    console.log("Dog: " + myDog.isInstanceOf(Dog));
    console.log("Mammal: " + myDog.isInstanceOf(Mammal));
});

最佳答案

我不确定您收到什么错误,但 className 参数本质上只是出于遗留原因而存在。声明的类被放置在具有该名称的全局变量中,但是当您使用 AMD 时,您实际上并不需要它。

例如,如果您这样做了:

var Dog = declare('MyLibrary.Doggie', Mammal, {
    makeNoise: function() {
        loglog("Waf waf"); //console.log("Waf waf");
    }
});

将会创建一个名为 MyLibrary 的全局对象,其中包含一个名为 Doggie 的成员。所以之后,你可以这样写:

var myDog = new MyLibrary.Doggie("Pluto"); // instead of Dog("Pluto");
myDog.sayName();
myDog.makeNoise();

我认为现在根本没有任何理由这样做,所以你应该忽略 className 参数。

var Mammal = declare(null, { .... });
var Dog = declare(Mammal, { .... });

关于javascript - DOJO 声明中可选的 className 参数有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29143023/

相关文章:

javascript - 如何解决 dgrid 中的 DefineAlreadyDefined 问题?

javascript - 确保给定参数的每个任务在 Node.JS 中仅完成一次

javascript - 流畅的异步 api 与 ES6 代理 javascript

javascript - 为特定服务器(或环境)禁用 tail.sh?

javascript - 为什么 <Redirect to ='/vacations'/> 不起作用

javascript - 如何检索 AMD'ized Dojo 的 XHR 响应代码(+时间戳)?

javascript - React-select 不会在 Enter 上提交表单

javascript - 使用Javascript CSJS代码和AJAX更新页面问题

dojo - DOJO 工具包的安装和集成

javascript - 冲突 dojo.require 和 Socket.io 客户端