最近在学习prototype.js代码,想利用其中的继承来学习一下javascript中的oo思想。碰见到了一些问题,如下
/*
* 第一种方法,不使用prototype的继承
* 这是以前在学习继承时使用的继承方法,
*/
function d(ui){
if(!ui){
return;
}
this.param1 = document.createElement(ui);
}
function e(ui){
if(!ui){
return;
}
this.base = d;
this.base(ui);
this.param2 = document.createElement(ui);
}
e.prototype = new d();
function f(ui){
if(!ui){
}
this.base = e;
this.base(ui);
}
f.prototype = new e();
var e1 = new e("div");
var e2= new e("div");
var f1 = new f("div");
var f2 = new f("div");
//能够拿到不同的param1对象
alert(e1.param1 ==e2.param1); //返回false
alert(f1.param2 == f2.param2);//返回false
/*
* 第二种方法,使用prototype继承
*/
var a = Class.create();
a.prototype = {
initialize:function(ui ){
this.param1 = document.createElement(ui);
}
}
var b = Class.create();
b.prototype = Object.extend(new a(),{
initialize:function(ui){
this.param2 = document.createElement(ui);
}
})
var c = Class.create();
c.prototype = Object.extend(new b(),{
initialize:function(param){
}
})
var b1 = new b("div");
var b2= new b("div");
var c1 = new c("div");
var c2 = new c("div");
//这里本意是每一个对象都能拿到自己的一个param1的属性
//但是这里拿到的是同一个引用
alert(b1.param1 == b2.param1);//return true
alert(c1.param2 == c2.param2);//return true
我的问题是我想用prototype的方法实现第一种代码的实现,在继承后,子类能拿到自己的在父类中param1对象,但是却发生了第二种代码的情况,这应该是由prototype中继承机制导致的,prototype中继承代码如下:
Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
//继承实现时如:
b.prototype = Object.extend(new a(),{}}
我参照ajax.base中形式改进了第二种方法如下:
/*
*第三种方法
*/
var a = Class.create();
a.prototype = {
initialize:function(param){
this.init(param);
},
init:function(param){
this.param1 = document.createElement(ui);
}
}
var b = Class.create();
b.prototype = Object.extend(new a(),{
initialize:function(param){
this.init(param);
this.param2 = document.createElement(ui);
}
})
var c = Class.create();
c.prototype = Object.extend(new b(),{
initialize:function(param){
//this.init(param);
}
})
var b1 = new b("div");
var b2= new b("div");
var c1 = new c("div");
var c2 = new c("div");
alert(b1.param1 == b2.param1);//return false
alert(c1.param2 == c2.param2);//return true
第三种方法我用一个init方法在每个对象中给param1赋值,这样每个子类能拿到不同的param1对象,但是这样多重继承后设置子类的属性时非常的不方便,请问有什么改进的方法吗?
分享到:
相关推荐
本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行解析。 ### 类的概念与模拟 在JavaScript中,我们通常使用函数来模拟类的行为。一个函数可以看作是一个类的定义,通过`new`关键字来...
在JavaScript中,遍历属性、理解`prototype`和掌握继承机制是编程中不可或缺的基本技能。本文将深入探讨这些概念,并通过实例来加深理解。 首先,让我们来看如何遍历JavaScript对象的属性。JavaScript提供了多种...
JavaScript中的原型(prototype)机制是实现继承的一种核心方式。由于JavaScript是一种基于原型的面向对象语言,它不支持传统的类(class)概念,因此其继承机制显得与众不同。在JavaScript中,对象可以直接从另一个...
标题"Prototype中英文手册"指出,我们关注的是一个名为"Prototype"的JavaScript库的文档集合,这个文档提供了中英文两种语言版本,帮助开发者理解和使用该库。 描述进一步细化了内容,包括"Prototype中文手册"和...
在JavaScript中,每个函数都有一个`prototype`属性,这个属性是一个对象,它的作用是当试图访问一个对象的属性时,如果该对象自身没有这个属性,就会去查找它的原型对象,以此类推,直到找到属性或者到达原型链的...
在DOM操作方面,Prototype提供了一套强大的DOM操作接口,如Element.extend()、Element.update()、Element.insert()等,这些方法使得在JavaScript中操作DOM元素变得简单易懂。同时,Prototype的Event模块允许我们方便...
"Prototype中文帮助文档"则包含了详细的API参考,是解决实际问题的好助手。 六、下载与应用 你可以通过提供的下载链接获取"Prototype.js 中文chm教程"和"Prototype.js 中文电子图书",安装后在本地查阅。同时,不要...
用户可以通过搜索、索引或目录浏览找到所需的信息,快速解决编程中遇到的问题。 总的来说,Prototype.js 是一个强大的JavaScript工具库,它通过丰富的API和优雅的设计,降低了Web开发的复杂性,提高了开发效率。...
Prototype 提供了一套完整的面向对象机制,使得在JavaScript中实现类和继承变得更加容易。通过`Class.create()`方法,我们可以创建新的类,而`Object.extend()`和`Prototype.extend()`则用于实现类的继承。此外,`...
Prototype JavaScript 框架是Web开发中的一个关键工具,它为JavaScript编程提供了许多实用的类库函数和设计模式。这个“Prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版”正是面向希望深入学习和掌握...
Prototype是JavaScript库中的一个关键工具,它为Web开发者提供了丰富的功能和便利,使得在JavaScript中进行AJAX(异步JavaScript和XML)编程变得更加简单高效。这个"Prototype&Prototype中文手册"压缩包包含了对...
JavaScript中的`prototype`是语言核心概念之一,它在对象创建、继承和方法共享中起着关键作用。在JavaScript中,每个对象都有一个`prototype`属性,这个属性引用了一个对象,通常用于实现对象间的继承。理解`...
2. **Ajax功能**:Prototype.js 强化了AJAX操作,通过`Ajax.Request` 和 `Ajax.Updater` 类,开发者可以轻松实现异步数据交换,无需关心浏览器兼容性问题。 3. **对象扩展**:Prototype.js 基于JavaScript原型链...
JavaScript中的prototype与继承是该语言面向对象编程的核心概念之一。prototype是JavaScript中实现原型继承的基础,它允许一个对象从另一个对象上继承属性和方法。通过了解prototype与继承的工作机制,开发者能够...
在JavaScript中,`prototype`是一个核心概念,它关乎对象继承和函数实例化。这篇"prototype学习笔记"可能探讨了如何利用原型链实现面向对象编程的关键技术。以下是对这个主题的详细解析。 首先,理解`prototype`的...
首先,我们需要明确一点,JavaScript是一种基于原型的语言,不同于基于类的语言如Java或C++,JavaScript中的继承主要是通过原型链(prototype chain)来实现的。在JavaScript中,每个对象都有一个内部链接指向另一个...
1. **类与对象继承**:Prototype.js引入了基于原型的类系统,允许开发者创建类并实现继承。这使得JavaScript代码可以采用面向对象的方式编写,增强了代码的可读性和可维护性。 2. **DOM操作**:Prototype提供了强大...
5. **模拟类和继承**:通过`Class.create`和`Object.extend`等函数,Prototype 实现了JavaScript中的类和继承概念。 6. **Ajax组件**:Prototype 还包含了一些预定义的UI组件,如`Autocompleter`和`Slider`,这些...
构造函数定义对象+prototype继承的实现,含CSS样式