search
HomeWeb Front-endJS TutorialMootools 1.2 Tutorial (21) - Class (2)_Mootools

Fdream Note: The original article seems to be missing a part, so I took it upon myself to add the following paragraph and the BaseClass code.
In today’s tutorial, we will mainly learn about the implementation and inheritance (extension) of classes in MooTools. Through implementation and inheritance, we can use the methods of the parent class in subclasses without having to redeclare and implement the same methods. The Class class in MooTools can help us do this easily. First, we define a base class.
Reference code:

Copy code The code is as follows:

var BaseClass = new Class( {
// Define a method testFunction
// This method pops up a dialog box
testFunction: function(){
alert('This function is defined in BaseClass');
}
});

Now that we have a base class, we can use its full functionality by creating a new class that implements it. Note that in the example below, our new class does nothing but implements the base class BaseClass.
Reference code:
Copy code The code is as follows:

// Create a file named ImplementingClass's class
var ImplementingClass = new Class({
// All I did was implement Baseclass
Implements : BaseClass
});

Now, We can create an instance of ImplementingClass and use the methods defined in BaseClass.
Reference code:
Copy code The code is as follows:

var demo_one = function() {
// Create an ImplementingClass instance
var test_class = new ImplementingClass();
// Call testFunction defined in BaseClass
test_class.testFunction();
}

demo_one()
You can also do the same thing with variables and initialization functions (constructors) in the base class. If you declare it in the implementation class (the class that implements the base class), everything you define in the base class will be transferred to the implementation class.
Note: From now on, all our examples below will use the following version of BaseClass.
Reference code:
Copy code The code is as follows:

var BaseClass = new Class( {
// Assign parameters to the inputVariable variable in this class
initialize: function(input){
this.inputVariable = input;
},
// Display the value of the variable inputVariable
testFunction : function(){
alert('BaseClass.testFunction() : ' this.inputVariable);
},
// Define an internal variable for all instances of this class
definedVariable : "Defined in BaseClass",
});
var ImplementingClass = new Class({
// Repeat:
// All we do here is implement BaseClass
Implements : BaseClass
});

The following example shows that initializers, function calls, and variables can be accessed as if they belonged to the implementation class.
Reference code:
Copy code The code is as follows:

var demo_two = function() {
// Create an ImplementingClass instance
var test_class = new ImplementingClass('this is the input value');
// Call testFunction() (defined in BaseClass)
test_class.testFunction ();
// Display the value of the variable definedVariable
alert('test_class.testVariable : ' test_class.definedVariable);
}

demo_two()
Once you Having implemented a class, you can add any functionality you want to your implementation class definition.
Reference code:
Copy code The code is as follows:

var ImplementingClass = new Class( {
Implements : BaseClass,
// The following functions are defined in BaseClass
definedVariable : "Defined in ImplementingClass",
testFunction : function(){
alert('This function is also defined in BaseClass');
},
// None of the following are defined in BaseClass
anotherDefinedVariable : "Also Defined in ImplementingClass",
anotherTestFunction : function(){
alert('This function is defined in ImplementingClass');
}
});

Please note that we redefined testFunction and definedVariable in the implementation class, just like we added new functions and variables. Special note: If you want to define a function or variable in the implementation class that has been defined in the base class, the definition in the base class will replace the definition in the implementation class. If you don’t understand, just look at the example below.
Reference code:
Copy code The code is as follows:

var demo_three = function() {
// Create an ImplementingClass instance
var test_class = new ImplementingClass('this is the input value');
// (Execute the method defined in BaseClass)
test_class.testFunction();
// Display the value of the variable definedVariable (the value defined in BaseClass)
alert('test_class.testVariable : ' test_class.definedVariable);
// (method defined in ImplementingClass)
test_class. anotherTestFunction();
// Display the value of the variable anotherDefinedVariable (the value defined in ImplementingClass)
alert('test_class.anotherDefinedVariable : ' test_class.anotherDefinedVariable);
}

demo_three()
Extends (Extensions)
If you want to override methods and variables defined in the base class, you can use Extends. Simply replace "Implements" with "Extends" in the above code.
Reference code:
Copy code The code is as follows:

var ExtendingClass = new Class( {
// Note that Extends is used here instead of Implements
Extends : BaseClass,
// The following are all defined in BaseClass
// But we use extend instead of implements
/ / This will override the definition in BaseClass
definedVariable : "Defined in ImplementingClass",
testFunction : function(){
alert('This function is also defined in BaseClass');
}
});
var demo_four = function(){
// Create an ImplementingClass instance
var test_class = new ExtendingClass('this is the input value');
// Call testFunction( ) (defined in both BaseClass and ExtendingClass)
test_class.testFunction();
// Display the value of the variable definedVariable (defined in both BaseClass and ExtendingClass)
alert('test_class. definedVariable : ' test_class.definedVariable);
}

demo_four()
Another useful feature of using extends is that it provides a function: overriding the initialization method of the base class , you can still call the initialization method in the base class. Therefore, if you define an initialization method like this in the base class:
Reference code:
Copy code The code is as follows:

initialize : function(){
alert('base class');
}

Then, the following initialization method is defined in the extension class , then two prompts will pop up showing "base class" and "extending class" respectively.
Reference code:
Copy code The code is as follows:

initialize : function(){
// Call the constructor of the parent class
this.parent();
alert('extending class');
}

If the initialization function of the parent class Parameters are required. Please make sure that the same input parameters are used in this initialization function and passed to the constructor of the parent class. In the example below, note that we don't specify any value for input - we just pass it to the parent class's constructor and it will be taken care of automatically.
Reference code:
Copy code The code is as follows:

var ExtendingClass = new Class( {
// Repeat: we are using extension methods instead of implementing
Extends: BaseClass,
initialize: function(input){
// Execute the parent class by calling this.parent Initialization method
this.parent(input);
// This way we can do some other things in the initialization method
// without completely overriding the parent class method
this.otherVariable = " Original Input Was : " input;
}
});
var demo_five = function(){
// Create our extended class instance
var test_class = new ExtendingClass('this is the input value');
// Call testFunction
test_class.testFunction();
// Display the value of variable otherVariable
alert("test_class.otherVariable : " test_class.otherVariable);
}

demo_five()
.implement() method
Not only can you use implements and extends to extend your class definition, you can also use their original classes to add functionality one at a time. In the following example, we will use a simple calculator class (calculator). When defining this class, we only gave it one function to add two numbers and one to subtract two numbers.
Reference code:
Copy code The code is as follows:

var Calculator = new Class({
// Specify two numbers during initialization
initialize: function(first_number, second_number){
this.first = first_number;
this.second = second_number;
},
/ / Add two numbers
// and return the result
add : function(){
result = this.first this.second;
alert(result);
},
// Subtract two numbers
// and return the result
subtract: function(){
result = this.first - this.second;
alert(result);
}
});

This all looks fine if you just want to add or subtract numbers, but what if you want to multiply them? Using the .implement(); method, we can add a functionality to this class, just as if we had created another class based on the Calculator class.
Reference code:
Copy code The code is as follows:

var demo_six = function(){
// Implement
// for the Calculator class and implement a method
Calculator.implement({
// Multiply two numbers
// and return the result
multiply : function() {
result = this.first * this.second;
alert(result);
}
});
// Create a Calculator class instance
var myCalculator = new Calculator (100, 50);
// Call the multiply method
myCalculator.multiply();
}

demo_six()
In the first part of the class tutorial, We use the print_r function to debug javascript. Using the implement method, we can make it very easy to print out the variable values ​​​​in a class, just implement this method in Calculator.
Reference code:
Copy code The code is as follows:

var demo_seven = function() {
// Implement a method for the Calculator class
// Used to print the content in this class
Calculator.implement({
show_class : function(){
alert(print_r(this , true));
}
});
// Create a Calculator class instance
var myCalculator = new Calculator(100, 50);
// Display class details
myCalculator.show_class();
}

demo_seven()
Code example
Although it is very concise, it is not suitable for the relatively simple calculator class. A particularly useful feature. However, since most objects in MooTools are classes created in the same way, we can use this method to extend MooTools classes to provide more functions. The following example implements a function that can display the content structure of any HTML you want to see. This functionality is now automatically added to any HTML element you interact with, so you can add a full description of the showStructure element to your element.
Reference code:
Copy code The code is as follows:

var demo_eight = function(){
Element.implement({
showStructure : function(){
var structure = '
' print_r(this, true) '
';
// Open a pop-up window
newWindow = window.open('','Element Debug','height=600,width=600,scrollbars=yes');
//Write the content into the pop-up window
newWindow. document.write(structure);
}
});
$('demo_eight').showStructure();
}

Note: To make this example To display correctly, you need to allow pop-up windows for this page first.

Learn more

Download a zip package with everything you need to get started

MooTools Class Documentation

Some really good discussions on making better use of MooTools classes

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Python vs. JavaScript: A Comparative Analysis for DevelopersPython vs. JavaScript: A Comparative Analysis for DevelopersMay 09, 2025 am 12:22 AM

The main difference between Python and JavaScript is the type system and application scenarios. 1. Python uses dynamic types, suitable for scientific computing and data analysis. 2. JavaScript adopts weak types and is widely used in front-end and full-stack development. The two have their own advantages in asynchronous programming and performance optimization, and should be decided according to project requirements when choosing.

Python vs. JavaScript: Choosing the Right Tool for the JobPython vs. JavaScript: Choosing the Right Tool for the JobMay 08, 2025 am 12:10 AM

Whether to choose Python or JavaScript depends on the project type: 1) Choose Python for data science and automation tasks; 2) Choose JavaScript for front-end and full-stack development. Python is favored for its powerful library in data processing and automation, while JavaScript is indispensable for its advantages in web interaction and full-stack development.

Python and JavaScript: Understanding the Strengths of EachPython and JavaScript: Understanding the Strengths of EachMay 06, 2025 am 12:15 AM

Python and JavaScript each have their own advantages, and the choice depends on project needs and personal preferences. 1. Python is easy to learn, with concise syntax, suitable for data science and back-end development, but has a slow execution speed. 2. JavaScript is everywhere in front-end development and has strong asynchronous programming capabilities. Node.js makes it suitable for full-stack development, but the syntax may be complex and error-prone.

JavaScript's Core: Is It Built on C or C  ?JavaScript's Core: Is It Built on C or C ?May 05, 2025 am 12:07 AM

JavaScriptisnotbuiltonCorC ;it'saninterpretedlanguagethatrunsonenginesoftenwritteninC .1)JavaScriptwasdesignedasalightweight,interpretedlanguageforwebbrowsers.2)EnginesevolvedfromsimpleinterpreterstoJITcompilers,typicallyinC ,improvingperformance.

JavaScript Applications: From Front-End to Back-EndJavaScript Applications: From Front-End to Back-EndMay 04, 2025 am 12:12 AM

JavaScript can be used for front-end and back-end development. The front-end enhances the user experience through DOM operations, and the back-end handles server tasks through Node.js. 1. Front-end example: Change the content of the web page text. 2. Backend example: Create a Node.js server.

Python vs. JavaScript: Which Language Should You Learn?Python vs. JavaScript: Which Language Should You Learn?May 03, 2025 am 12:10 AM

Choosing Python or JavaScript should be based on career development, learning curve and ecosystem: 1) Career development: Python is suitable for data science and back-end development, while JavaScript is suitable for front-end and full-stack development. 2) Learning curve: Python syntax is concise and suitable for beginners; JavaScript syntax is flexible. 3) Ecosystem: Python has rich scientific computing libraries, and JavaScript has a powerful front-end framework.

JavaScript Frameworks: Powering Modern Web DevelopmentJavaScript Frameworks: Powering Modern Web DevelopmentMay 02, 2025 am 12:04 AM

The power of the JavaScript framework lies in simplifying development, improving user experience and application performance. When choosing a framework, consider: 1. Project size and complexity, 2. Team experience, 3. Ecosystem and community support.

The Relationship Between JavaScript, C  , and BrowsersThe Relationship Between JavaScript, C , and BrowsersMay 01, 2025 am 12:06 AM

Introduction I know you may find it strange, what exactly does JavaScript, C and browser have to do? They seem to be unrelated, but in fact, they play a very important role in modern web development. Today we will discuss the close connection between these three. Through this article, you will learn how JavaScript runs in the browser, the role of C in the browser engine, and how they work together to drive rendering and interaction of web pages. We all know the relationship between JavaScript and browser. JavaScript is the core language of front-end development. It runs directly in the browser, making web pages vivid and interesting. Have you ever wondered why JavaScr

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.