众所周知,Javascript使用原型链来实现面向对象的继承关系。
下面我们就拿一段Prototype框架中的创建对象的代码片段来分析对象继承是如何实现的(注意prototype和constructor的用法):
function subclass() {}; //定义一个空函数
function create() {
var parent = null, properties = $A(arguments); //分析入参
if (Object.isFunction(properties[0])) //查看第一个参数时候是函数,如果是函数,把它作为父对象
parent = properties.shift();
function klass() { //定义对象创建函数
this.initialize.apply(this, arguments); //入参中一般必须包含一个initialize方法,就像对象的构造函数一样,如果没有定义,会自动使用一个空函数替代
}
Object.extend(klass, Class.Methods); //扩展Prototype自定义的一些方法,略过
klass.superclass = parent; //定义一个对象属性superclass,指向父对象
klass.subclasses = []; //定义一个数组属性subclasses,用于存放所有的子对象
if (parent) { //如果存在父对象的话
subclass.prototype = parent.prototype; //先将子对象的prototype属性指向父对象,从而继承了父对象的所有属性及方法
klass.prototype = new subclass; //这里是最关键的地方,通过对子对象prototype的赋值,达到继承了父对象所有属性及方法的目的
parent.subclasses.push(klass); //然后更新父对象的子对象数组
}
for (var i = 0, length = properties.length; i < length; i++)
klass.addMethods(properties[i]); //把入参中出去父对象之外的所有属性添加至新创建的对象中
if (!klass.prototype.initialize) //如果没有定义initialize方法,会使用一个空函数来替代
klass.prototype.initialize = Prototype.emptyFunction;
klass.prototype.constructor = klass; //由于创建过程中修改了prototype属性,导致现在新创建的对象的构造函数指向父对象,这里重新把构造函数修改成对象本身
return klass; //返回对象创建函数
}
至此,一个对象就创建好了,通过下面的例子就一目了然了。
var User = Class.create({
initialize: function(name){
this.name = name;
},
getName: function(){
return this.name;
}
})
创建一个带有父对象的新对象
var Account = Class.create(User, {
initialize: function(bankInfo){
this.bankInfo = bankInfo;
},
getBankInfo: function(){
return this.bankInfo;
}
})
这样,一个继承自User对象的Account对象就创建好了,是不是很简单啊。
分享到:
相关推荐
JavaScript原型链是JavaScript语言中的一个核心特性,它关乎对象之间的继承关系。在JavaScript中,一切皆为对象,而原型链则是实现对象间属性和方法共享的一种机制。理解原型链对于深入学习JavaScript至关重要。 ...
本文将深入探讨JavaScript原型链的工作原理及其可能导致的安全问题——原型链污染。 首先,JavaScript 中的对象继承并不像传统面向对象语言那样基于类,而是通过原型链机制。每个对象都有一个内部属性`[[Prototype]...
JavaSciptDOM基本操作,JavaScipt函数基础,JavaScipt流程语句,JavaScript变量,JavaScript数据类型,JavaScript数组,JavaScript正则表达式,JavaScript字符串函数,Window对象等图解。JS高手进阶的工具图谱
JavaScript原型链是JavaScript实现继承和共享属性的一种机制。在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常可以通过`__proto__`(非标准,但常见于许多环境)或`Object.getPrototypeOf()`来访问...
主要介绍了JavaScript原型链与继承操作,结合实例形式总结分析了javascript原形链与继承的相关概念、使用方法及操作注意事项,需要的朋友可以参考下
理解函数的原型链和闭包对于深入掌握JavaScript至关重要。 首先,让我们看看函数的定义方式。在JavaScript中,我们可以使用`function`关键字直接定义函数,如`function fn(a, b) {}`。此外,函数也可以通过赋值语句...
JavaScript的原型链是理解JavaScript对象继承机制的关键。在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`或`Object.getPrototypeOf()...这就是JavaScript原型链的基本工作原理和示例。
在深入理解JavaScript原型链和继承的概念之前,首先要了解JavaScript是一种基于对象的语言,而非传统的面向对象语言。它没有类的概念,函数可以被视为构造器,而对象则是通过构造函数、原型对象和实例之间的特殊关系...
JavaScript原型链是理解JavaScript面向对象编程中的核心概念之一。它是一种机制,通过它可以共享方法和属性,从而实现代码复用和继承。本文将详细介绍原型链的概念、显式和隐式原型链、prototype和__proto__的概念...
JavaScript原型链是这门语言的核心概念之一,它关系到对象属性的继承机制。在JavaScript中,所有对象都有一个原型,原型也是一个对象,从而形成了一条原型链。每个对象通过内部属性[[Prototype]](ES6后建议使用...
接着,关于prototype和__proto__,这两者都是JavaScript原型链中容易产生混淆的地方。每一个函数都有一个prototype属性,该属性是一个指针,指向函数的原型对象。而每一个JavaScript对象都有一个__proto__属性(注意...
JavaScript原型链继承是一种利用对象原型(prototype)进行继承的方式,它是JavaScript语言的核心特性之一,为对象间的继承提供了便利。在JavaScript中,所有的对象都有一个指向其原型对象的内部链接,而这个原型...
### JavaScript原型链学习总结 #### 一、JavaScript中的对象与函数 在JavaScript中,一切皆为对象,这包括数字、字符串、数组等基本类型以及函数等复杂类型。更进一步地讲,函数也是对象的一种特殊形式,它既是第...
原型链和继承是JavaScript中实现面向对象编程的重要概念。本篇将深入探讨这两个关键知识点,并结合提供的`main.js`代码示例进行解析。 ### 一、JavaScript 原型链 原型链是JavaScript中实现对象继承的一种方式,它...
JavaScript中的对象通过原型链来进行属性查找和方法调用,而原型链的维护和继承是JavaScript面向对象编程中的核心概念之一。 首先,原型链是指每个对象都会在其内部初始化一个指向构造函数原型(prototype)对象的...
这个机制是理解JavaScript继承和原型链操作的关键。 要说明原型链的工作原理,我们可以从几个方面着手: 1. __proto__属性:所有JavaScript对象都具有一个__proto__属性,这个属性指向对象的原型对象。然而,这个...
JavaScript是Web开发中不可或缺的一部分,尤其在前端领域,它的强大在于动态性和灵活性。在这个"基于js原型链的小游戏"中,我们...这不仅是一个理解JavaScript原型链的好例子,也是实践前端开发技能的绝佳实践项目。