`
radar
  • 浏览: 28407 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

Re: javascript中基于原型法直接实现继承中的一个陷阱和解决

    博客分类:
  • ajax
阅读更多
<SCRIPT LANGUAGE="JavaScript">
<!--
var Class = {
    isPrototype: function () {}, 
    create: function() {
        return function() {
            if (arguments && arguments[0] != Class.isPrototype)
                this.initialize.apply(this, arguments);
        }
    },
	extend : function(destination, source) {
		for (property in source) {
			destination[property] = source[property];
		}
		return destination;
    },
    inherit: function () {
        var superClass = arguments[0];
        var proto = new superClass(Class.isPrototype);
        for (var i = 1; i < arguments.length; i++) {
            if (typeof arguments[i] == "function") {
                var mixin = arguments[i];
                arguments[i] = new mixin(OpenLayers.Class.isPrototype);
            }
            Class.extend(proto, arguments[i]);

            if((arguments[i].hasOwnProperty && arguments[i].hasOwnProperty('toString')) ||
               (!arguments[i].hasOwnProperty && arguments[i].toString)) {
                proto.toString = arguments[i].toString;
            }
        }
        return proto;
    }
};
var Base=Class.create();
Base.prototype={
	x : 1,
	y : 2,
	initialize : function(){
		this.x=100;
		this.y=10;
	},
	area : function(){
		return this.x * this.y  
	}
}

var Child = Class.create();
Child.prototype=Class.inherit(Base,{
	initialize : function(){
		Base.prototype.initialize.apply(this);
		this.x=10;
	},
	area : function(){
		var old=Base.prototype.area.apply(this);
		return old + 100000;
	}
});
var base=new Base();
var child=new Child();
alert(child.area())
//-->
</SCRIPT>
分享到:
评论
1 楼 colinkyo 2008-12-29  
var superClass = arguments[0];  
        var proto = new superClass(Class.isPrototype);  
这是什么意思?

相关推荐

    浅析JavaScript实现基于原型对象的“继承”.pdf

    通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合模式”,使读者能够更好地理解和应用JavaScript的原型继承。 概述 JavaScript是一门面向Web的编程语言,具有高端、动态以及面向对象的...

    详解JavaScript中基于原型prototype的继承特性_.docx

    在JavaScript中,对象可以直接从另一个对象继承属性和方法,这主要是通过原型链(prototype chain)来实现的。 首先,每个函数都有一个`prototype`属性,这个属性是一个对象,当通过该函数创建新对象时,新对象会...

    JavaScript中的原型和继承详解(图文)_.docx

    JavaScript 中的原型和继承详解 在深入探讨编程语言时,我们经常会遇到一些专业术语,比如“原型”和“继承”,它们是面向对象编程中的核心概念。JavaScript 作为一门灵活且功能强大的编程语言,其原型和继承的实现...

    JavaScript学习之三 — JavaScript实现继承的7种方式

    当试图访问一个对象的属性时,JavaScript会首先在当前对象中查找,如果找不到,则会向上搜索其原型,直至找到属性或到达原型链的顶端(即`null`)。通过设置一个对象的`__proto__`属性为另一个对象,可以实现继承。 ...

    javascript 原型模式实现OOP的再研究

    JavaScript中的原型模式是一种实现面向对象编程(OOP)的关键机制,它基于原型继承,使得对象可以从其他对象那里获得属性和方法。在这个模式下,每个函数都有一个`prototype`属性,这个属性是一个对象,用于共享属性...

    JSON的魔力:JavaScript中的JSON使用全指南

    3. **基于原型**:JavaScript使用基于原型的继承,而不是基于类。 4. **自动内存管理**:具有垃圾回收机制,自动回收不再使用的对象所占用的内存。 5. **动态类型**:变量的类型在运行时确定,不需要事先声明。 6. *...

    JavaScript实现继承的几种方式

    寄生组合继承解决了组合继承中父类构造函数会被调用两次的问题,通过创建父类的一个不被使用的实例,然后将子类的原型指向这个实例的原型。 ```javascript function inheritPrototype(subType, superType) { let ...

    一套基于纯js实现的JavaScript典型应用技巧例子源码

    闭包是JavaScript中的一个高级特性,允许函数访问并操作其外部作用域的变量,即使在其外部作用域已经结束时也是如此。 3. **对象与原型链**:JavaScript的万物皆对象,理解对象的创建、属性和方法的访问至关重要。...

    Javascript原型继承

    JavaScript原型继承是面向对象编程在JavaScript中的实现方式之一,它基于原型(Prototype)和对象的特性,使得一个对象可以继承另一个对象的属性和方法。在JavaScript中,每个对象都有一个特殊的内部属性`[...

    java script 继承的实现

    在 JavaScript 中,继承主要通过原型链(prototype chain)、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承等方法实现。以下是对这些继承方式的详细解释: 1. **原型链继承**:这是 JavaScript ...

    浅析Javascript原型继承 推荐第1/2页

    通过以上分析,我们了解到JavaScript中基于原型的继承机制,它与传统基于类的继承有所不同,但仍然提供了实现代码复用和创建复杂对象层次结构的能力。掌握原型继承对于深入理解JavaScript对象模型和设计模式至关重要...

    javaScript面向对象继承方法经典实现.docx

    这种方法试图改进基于原型的继承,避免了使用`new`关键字和直接操作`prototype`。在第二种代码示例中,`pet`函数创建了一个包含私有变量`name`和公开方法`getDetails`的对象。`legs`在这里被保护,不允许直接修改。...

    详解Javascript继承的实现

    本文将深入探讨JavaScript继承的实现方式,以及其中的问题和解决方案。 首先,我们来看混合方式的实现,这种方式结合了原型链和对象冒充。在JavaScript中,构造函数是用于创建特定类型对象的函数。例如,`Employee`...

    再谈javascript原型继承

    但是自己对于这个问题一直没有彻底理解,今天花了点时间又看了一遍《Javascript模式》中关于原型实现继承的几种方法,下面来一一说明下,在最后我根据自己的理解提出了一个关于继承比较完整的实现。

    深度探讨javascript函数的原型链和闭包

    通过原型链,我们可以实现基于原型的继承;通过闭包,我们能够控制作用域和访问变量,提升代码的复用性。理解和掌握这些概念,将有助于编写更加高效、可维护的JavaScript代码。在实际编程中,灵活运用这些特性可以...

    js高端系列教程(26)——JavaScript探秘:强大的原型和原型链.docx

    通过深入理解JavaScript中的原型和原型链,我们可以更好地设计面向对象的程序结构,实现更加灵活的继承和封装。掌握这些核心概念对于成为一名高效的JavaScript开发者至关重要。希望本文能够帮助读者更深刻地理解...

    JavaScript跨域问题全攻略:突破浏览器同源限制

    1. **基于原型**:JavaScript使用基于原型的继承,而不是像Java那样的类继承。 2. **自动内存管理**:它具有自动垃圾回收机制,帮助管理内存使用。 3. **动态类型**:JavaScript是一种动态类型语言,变量可以存储...

    JavaScript继承的特性与实践应用深入详解

    总结,JavaScript的继承机制通过原型和构造函数实现了对象间的代码重用。理解并熟练运用这些特性,可以帮助开发者创建出更加灵活和可扩展的代码结构,提高开发效率。在实践中,可以结合使用`inherits`和`method`等...

    第15章 javascript面向对象与原型

    总的来说,JavaScript中的面向对象编程与传统的基于类的OOP有所不同,它通过原型链和构造函数来实现对象的创建和继承。正确理解并运用这些概念,可以让开发者更有效地利用JavaScript进行面向对象的编程。

Global site tag (gtag.js) - Google Analytics