<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript</title>
<script type="text/javascript" src="jquery.min.js"></script>
<!-- JavaScript 本身是一种面向对象的语言,
它所涉及的元素根据其属性的不同都依附于某一个特定的类。
我们所常见的类包括:数据变量(Array)、逻辑变量(Boolean)、
日期变量(Date)、结构变量(Function)、数值变量(Number)、
对象变量(Object)、字符串变量(String)等
1.所有JavaScript内部对象都有只读的prototype属性。
可以向其原型中动态添加功能(属性和方法),
但该对象不能被赋予不同的原型。然而,
用户定义的对象可以被赋予新的原型(继承)。
2.为已有的类型添加方法
3为自己的类创建方法
-->
<script type="text/javascript">
//定义类
function Car(sColor, iDoors, iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike", "Sue");
}
function Car2(sColor, iDoors,iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike", "Sue");
if(typeof Car2._initialized == "undefined") {
Car2.prototype.showColor = function(){
alert(this.color);
}
}
}
function btn1_onclick(){
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
oCar1.drivers.push("Matt");
alert(oCar1.drivers);
alert(oCar2.drivers);
oCar1.showColor();
}
function TestObjectA() {
this.MethodA = function(){
alert("TestObjectA.MethodA()");
}
}
function TestObjectB(){
this.MethodB = function(){
alert("TestObjectB.MethodB()");
}
}
//继承
TestObjectB.prototype = new TestObjectA();
function btn3_onclick(){
var t = new TestObjectB();
t.MethodA();
t.MethodB();
}
function btn2_onclick(){
var oCar1 = new Car2("red", 4, 23);
var oCar2 = new Car2("blue", 3, 25);
oCar1.drivers.push("Matt");
alert(oCar1.drivers);
alert(oCar2.drivers);
oCar1.showColor();
}
Car.prototype.showColor = function(){
alert(this.color);
}
$(function(){
});
</script>
</head>
<body>
<button id="btn1" onclick="btn1_onclick()">btn1</button>
<button id="btn2" onclick="btn2_onclick()">btn2</button>
<button id="btn3" onclick="btn3_onclick()">btn3</button>
</body>
</html>
分享到:
相关推荐
混合构造函数/原型模式结合了构造函数和原型两种方式的优点。通过构造函数定义对象的属性,通过原型定义对象的方法。这样,每个对象的属性仍然是唯一的,而方法则可以通过原型链被所有对象共享。混合模式的代码示例...
在JavaScript中定义类和对象的方法大致可以分为两类,一种是使用函数方式定义,另一种是先实例化Object类的方式定义。下面详细介绍这两种方法的实现和使用。 首先,函数方式定义类是最直观和常用的方法,它基于函数...
以上六种继承方式在JavaScript面向对象编程中各有用途,开发者可以根据具体需求选择最适合的继承方式。需要注意的是,虽然继承可以使代码复用性更高,但过度的继承层次和复杂的继承关系可能会导致代码难以理解与维护...
这是一种非常灵活和高效的继承方式。 结论 本文对JavaScript实现基于原型对象的“继承”进行了深入分析,并与基于类的继承进行比较。通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合...
例如,你可以创建一个类来表示数据模型,通过继承和组合来构建复杂的组件系统,或者用类来封装异步操作,提高代码的可读性和可复用性。 最后,让我们来看一下`a.js`这个文件。尽管没有具体的代码,但可以想象它可能...
JavaScript中的继承是一个重要的概念,它允许开发者创建具有共同属性和方法的类层次结构,从而减少代码重复并提高代码复用性。与其他面向对象语言不同,JavaScript并没有简单的继承关键字,而是利用原型(prototype)...
在Web开发领域,ASP.NET和JavaScript是两种非常重要的技术,它们分别在服务器端和客户端发挥着关键作用。本文将深入探讨如何在ASP.NET环境中有效地利用JavaScript进行交互和增强用户体验。 首先,ASP.NET是由微软...
总结起来,RequireJS为我们提供了一种优雅的方式来组织和加载JavaScript代码,而结合类的定义和继承,我们可以构建复杂的面向对象应用程序。在实际项目中,我们还可以利用RequireJS的优化工具进行代码压缩和合并,...
在JavaScript中,有两种类型的继承:原型链继承和构造函数继承。本文主要关注原型链继承,它是基于对象的`[[Prototype]]`属性和函数的`prototype`属性实现的。 1. **`prototype`**: - 每个函数对象都有一个`...
以下是JavaScript的六种继承方式中的两种主要方式:类式继承(构造函数)和原型继承的详细解析。 ### 类式继承(构造函数) 在JavaScript中,并没有真正的类概念,但可以通过构造函数来模拟类的行为。当使用`new`...
尽管它没有像Java或C++那样的传统类(class)概念,但JavaScript依然提供了强大的面向对象编程能力,这主要体现在封装、继承和多态性上。本文将深入探讨JavaScript中的封装和继承,以及它们在实际应用中的实现。 ##...
JavaScript中的继承方式主要指的是如何让子类继承父类的属性和方法,以实现代码的复用和组织的清晰。...每种继承方式都有其优势和适用场合,了解这些方式的细节和差异有助于编写出更加健壮和高效的代码。
总之,JavaScript类提供了一种组织和抽象代码的方式,通过类我们可以创建具有特定属性和方法的对象。了解和熟练掌握JavaScript类的概念和用法,对于进行软件开发和程序设计至关重要,尤其是在构建复杂应用时。
本文将深入探讨两种常见的定义对象原型的方法:通过`prototype`属性和通过对象字面量。 ### 第一种方法:使用`prototype`属性 ```javascript function Person() { this.username = new Array(); this.password =...
组合继承则结合了构造继承和原型链继承,但存在“两次调用父类构造函数”的问题。寄生组合继承通过一个中间函数解决了这个问题,使得继承更加高效。 总的来说,JavaScript的继承机制虽然不那么直观,但它提供了丰富...
以上知识点详细介绍了JavaScript面向对象编程中的基本特性、对象的定义方式以及如何通过不同方式实现封装、继承和多态。通过深入理解这些概念,可以帮助开发者更加高效和规范地进行JavaScript编程,编写出更加优雅...
其它的面向对象程序设计语言都是通过关键字来解决继承的问题。但是javascript中并没有定义这种实现的机制。接下来通过本文给大家介绍Javascript中类式继承和原型式继承的实现方法和区别,需要的朋友可以参考下
这种方式使得子类型可以访问父类型定义的属性和方法,但这种继承并非原型链上的继承,而是一种类似于拷贝的方式来实现。JavaScript对象具有多态性,可以动态地添加属性和方法,这为实例间的继承提供了便利。具体操作...
通常,我们会考虑以下两种方法: 1. **构造函数继承**(不推荐):直接在`Zhangsan`构造函数中复制`Person`的属性和方法。这种方法的问题在于,如果`Person`改变,`Zhangsan`也需要同步修改,违反了DRY(Don't ...