来自于这里,http://javascript.crockford.com/inheritance.html
这个可以为javascript继承提供很大的方便
目前还不知道有没有什么弊端
Function.prototype.method=function(name,fun){
this.prototype[name]=fun;
return this;
}
Function.method('inherits', function (parent) {
var d = {}, p = (this.prototype = new parent());
//这个方法可以用来调用被覆盖的父类方法
this.method('uber', function uber(name) {
if (!(name in d)) {
d[name] = 0;
}
var f;//要执行的函数
var r;//函数的返回值
var t = d[name], v = parent.prototype;
if (t) {
while (t) {
v = v.constructor.prototype;
t -= 1;
}
f = v[name];
} else {
f = p[name];
if (f == this[name]) {
f = v[name];
}
}
d[name] += 1;
r = f.apply(this, Array.prototype.slice.apply(arguments,[1]));
d[name] -= 1;
return r;
});
return this;
});
function Person(name){
this.name=name;
}
//给Person添加getName
Person.method("getName", function(o){
return this.name;
});
function User(name,password){
this.name=name;
this.password=password;
};
//User继承Person
User.inherits(Person);
User.method("getPassword",function(){
alert(this.password);
});
//重写getName方法
User.method("getName",function(o){
//this.uber("getName")调用原始的getName方法,如果原始方法带参数则为this.uber("method",arg1,arg2,argN)
alert("My Name is "+this.uber("getName"));
});
var u=new User("张三",111111);
u.getPassword();
u.getName();
如果有什么不对的 欢迎指出,
分享到:
相关推荐
通过阅读这篇博文(链接已提供),我们可以学习如何构建自己的继承工具函数,并理解其工作原理。 在JavaScript中,常见的继承模式有原型链继承、构造函数继承、组合继承、寄生继承、原型式继承、委托继承等。这里...
类提供了创建对象的模板,对象是数据和行为的载体,而构造函数则是创建和初始化对象的工具。通过类的继承,我们可以复用代码,构建更复杂的软件结构。在实际开发中,理解并熟练运用这些概念对于编写高效、可维护的...
2. **对象和原型**:深入理解原型链,掌握构造函数、原型对象以及对象字面量的用法,了解如何创建和继承对象。 3. **数组和集合**:学习JavaScript中的数组操作,如map、filter、reduce等高阶函数的运用,以及Set和...
在 JS 中,有四种主要的函数调用模式,分别是:普通函数调用、方法调用、构造函数调用和apply/call调用。下面我们将详细探讨这些调用模式。 1. **普通函数调用**: 这是最常见的情况,函数作为一个独立的实体被执行...
7. **原型链与继承**: JavaScript通过原型实现继承,每个对象都有一个`__proto__`属性,指向创建它的构造函数的原型。继承是通过`prototype`对象和`Object.create()`方法实现的。 8. **多态**: 多态是指同一消息...
- 首先,创建一个继承自`QObject`的C++类,暴露槽函数给JavaScript。比如,创建一个`MyBackend`类: ```cpp class MyBackend : public QObject { Q_OBJECT public slots: void handleJsCall(const QString &...
JavaScript ES6中的箭头函数是语言的一个重要更新,它提供了更简洁、更直观的语法来定义函数。在本文中,我们将深入探讨箭头函数的基本概念、语法特性、作用域规则以及与传统函数的区别。 ### 1. 箭头函数的基本...
"js压缩工具.zip"这个压缩包很可能包含了若干个用于压缩和优化JavaScript文件的工具。 1. 压缩工具的作用: - 减小文件大小:通过删除空格、换行和不必要的字符,JS压缩工具能显著减小文件体积,加快网页加载速度...
在JavaScript中,面向对象编程是其核心特性之一,而继承和派生则是实现面向对象的重要机制。本资料集合关注的是JavaScript中的继承派生以及与之相关的`apply`和`call`方法。 **继承**是面向对象编程的关键概念,...
JavaScript中的函数对象调用模式是编程中至关重要的概念,它涉及到函数作为一等公民、作用域、闭包、原型链等多个核心知识点。这篇博客通过深入分析JavaScript中的函数调用模式,帮助开发者更好地理解和掌握这些概念...
通过函数构造器、原型链以及`prototype.js`文件中可能提供的类和继承工具,我们可以创建复杂的对象结构和组织代码。理解并掌握这些概念有助于提升JavaScript编程能力,更好地适应现代Web开发的需求。
组合继承结合了构造函数和原型链继承,子类先调用父类构造函数来初始化属性,再通过原型链继承父类的方法。这种方式解决了前两者的问题,但存在性能损耗,因为父类构造函数会被调用两次。 5. 原型委托继承...
本篇文章将深入探讨JS函数的三种声明方式:函数声明、函数表达式以及箭头函数。 1. **函数声明** 函数声明是最常见的方式,它以`function`关键字开头,后跟函数名,然后是参数列表,最后是函数体。例如: ```...
"js函数扩展"这个主题深入探讨了如何利用JavaScript的特性来增强和优化函数的使用。这篇博客文章(链接:https://ninnd.iteye.com/blog/1168733)可能涵盖了诸如函数柯里化、高阶函数、闭包、以及箭头函数等高级概念...
事件驱动编程中,回调函数是处理异步操作的重要工具。使用匿名函数可以简化代码,提升开发效率。此外,递归函数在处理具有自相似结构的问题时非常有效,但需要注意避免无限递归导致的栈溢出错误。 在使用函数时需要...
下面将深入探讨JavaScript继承的特性及其实践应用。 1. 伪类继承: JavaScript 的继承机制不直接实现对象间的继承,而是通过构造函数创建对象,并利用`prototype`属性来实现。当一个函数被创建时,它的`prototype`...
3. **基于原型(Prototype-based)**:JavaScript 使用原型继承,对象可以继承其他对象的属性和方法。 4. **事件驱动(Event-driven)**:JavaScript 可以通过监听和处理用户或系统的事件来实现交互性。 5. **函数...
在 JavaScript 中,继承主要通过原型链(prototype chain)、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承等方法实现。以下是对这些继承方式的详细解释: 1. **原型链继承**:这是 JavaScript ...
组合继承结合了原型链继承和构造函数继承的优点,避免了父类构造函数被多次调用的问题。它首先通过构造函数复制属性,然后通过原型链继承方法。 ```javascript function Parent(name) { this.name = name; } ...
在JavaScript中,实现类式继承是面向对象编程中的一个关键概念。JavaScript本身是一种基于原型的动态类型语言,但在ES6引入了`class`语法糖,使得类的概念更加清晰,但其实质仍然是基于原型的继承。下面我们将深入...