mootools 获取类名_使用MooTools创建命名空间的类

mootools 获取类名

MooTools has always gotten a bit of grief for not inherently using and standardizing namespaced-based JavaScript classes like the Dojo Toolkit does.  Many developers create their classes as globals which is generally frowned up.  I mostly disagree with that stance, but each to their own.  In any event, namespaces are technically just nested objects and I recently shared with you how to create and retrieve nested objects with MooTools.  With those utility functions available, I've modified Class so that you can create namespaced classes easily!

由于没有像Dojo Toolkit那样固有地使用和标准化基于命名空间JavaScript类,因此MooTools一直感到有些悲伤。 许多开发人员将他们的类创建为Globals,而这些类通常不被接受。 我大多不同意这种立场,但各持己见。 无论如何,从技术上讲,名称空间只是嵌套对象,我最近与您分享了如何使用MooTools创建和检索嵌套对象 。 有了这些实用程序功能,我修改了Class,以便您可以轻松创建命名空间的类!

MooTools JavaScript (The MooTools JavaScript)

The technique below is very much like monkey patching:

以下技术非常类似于猴子修补


(function() {
	
	// Keep reference to the original Class
	var klass = Class;
	
	// Redefine class ("that's deep")
	Class = function(name, params, context) {
		// Find out if this is namespaced or the original method
		var namespaced = (arguments.length > 1);
		
		// Add the class name to the param list
		if(namespaced) params.$name = name;
		
		// Create and get the original class
		var original = new klass(namespaced ? params : name);
		
		// If namespaced, set class into namespace
		if(namespaced) Object.place(name, original, context);
		
		// Return this newly created class!
		return original;
	};
	
})();


I keep a reference to the original Class, as I'll be using it within my new Class function.  The new signature allows for a namespaced class name, the usual class properties, and the context which may be passed to the Object.place method.  The first step is analyzing the arguments provided to Class;  if one argument, it's a traditional class;  if more than one argument is provided, we know we're trying to create a namespaced class and will act accordingly.  You'll also notice that I add a $name property to the class prototype, providing the given class name to the class for later use.  I've found the class' declaredClass property incredibly helpful within Dojo.

我保留了对原始Class的引用,因为我将在新的Class函数中使用它。 新的签名允许使用命名空间的类名称,通常的类属性以及可以传递给Object.place方法的上下文。 第一步是分析提供给Class的参数; 如果有一个论点,那是传统的一类; 如果提供了多个参数,我们知道我们正在尝试创建一个命名空间的类并将采取相应的措施。 您还会注意到,我在类原型中添加了$name属性,为该类提供了给定的类名称,以供以后使用。 我发现在Dojo中,类的clarifiedClass属性非常有用。

Here's how you'd use the new Class function:

使用新的Class函数的方法如下:


// Create a namespaced class
var myClass = new Class("davidwalsh.ui.Slider", {
	initialize: function() { 
		// Do stuff!
	},
	doSomething: function(){}
});
// myClass === davidwalsh.ui.Slider!

// Create an instance of the class
var myInstance = new davidwalsh.ui.Slider({
	// props
});

// Get the name of the declared class
var instanceClassName = myInstance.$name; // equals "davidwalsh.ui.Slider"


The first argument becomes the namespace and class name as a string.  The second argument is the traditional parameters argument.  If only one argument is provided to the Class function, the class is created and returned per usual;  in fact, both the namespaced method and traditional method return the newly created class.  The method provided above is completely backward compatible so you wont have rewrite your existing code.

第一个参数成为字符串的名称空间和类名称。 第二个参数是传统参数参数。 如果仅向Class函数提供一个参数,则按常规创建并返回该类; 实际上,命名空间方法和传统方法都将返回新创建的类。 上面提供的方法是完全向后兼容的,因此您无需重写现有代码。

Namespaced classes are probably a good idea, as many would argue that "polluting" the global namespace with numerous objects can lead to problems.  In any event, this namespacing method should help you make the most of my set/get nested object methods and allow you to keep the global namespace as clean as you'd like!

命名空间类可能是一个好主意,因为许多人认为用大量对象“污染”全局命名空间会导致问题。 无论如何,这种namespacing方法应该可以帮助您充分利用我的set / get嵌套对象方法,并可以使全局名称空间保持所需的整洁!

翻译自: https://davidwalsh.name/namespace-mootools

mootools 获取类名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值