javascript如何定义类和对象
1、原始方式
var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };
2、工厂方法
function createCar(sColor,iDoors,iMpg) { var oTempCar = new Object; oTempCar.color = sColor; oTempCar.doors = iDoors; oTempCar.mpg = iMpg; oTempCar.showColor = function() { alert(this.color); }; return oTempCar; } var oCar1 = createCar("red",4,23); var oCar2 = createCar("blue",3,25); oCar1.showColor(); //输出 "red" oCar2.showColor(); //输出 "blue"
缺点是:1、每次都创建一个object类型的对象,不能使用instanceof
2、每次创建对象的时候,方法也会被创建一次,方法不能被同一个类的对象共享。
在工厂方法外构建方法
function showColor() { alert(this.color); } function createCar(sColor,iDoors,iMpg) { var oTempCar = new Object; oTempCar.color = sColor; oTempCar.doors = iDoors; oTempCar.mpg = iMpg; oTempCar.showColor = showColor; return oTempCar; } var oCar1 = createCar("red",4,23); var oCar2 = createCar("blue",3,25); oCar1.showColor(); //输出 "red" oCar2.showColor(); //输出 "blue"
但是从语义上来讲这个方法showColor不太像对象的属性。
3、构造函数方式
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.showColor = function() { alert(this.color); }; } var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25);
优点:跟工厂方式不同的是,每次创建同一个类的对象时,不是创建一个object的对象,使用this。同时,可以使用instance of。
缺点:和工厂方式一样,不能再构造函数内定义共享的函数。
4、原型对象
function Car() { } Car.prototype.color = "blue"; Car.prototype.doors = 4; Car.prototype.mpg = 25; Car.prototype.drivers = new Array("Mike","John"); Car.prototype.showColor = function() { alert(this.color); }; var oCar1 = new Car(); var oCar2 = new Car(); oCar1.drivers.push("Bill"); alert(oCar1.drivers); //输出 "Mike,John,Bill" alert(oCar2.drivers); //输出 "Mike,John,Bill"
使用原型方式的缺点是同一类的所有对象将共享同一原型对象,原型对象的所有属性都将被共享,且属性定义只能在原型定义之后。
优点:1、同一类创建的对象将共享类的方法。
缺点:1、从这个类new出来的对象共享类的所有属性。如加粗的部分,数组引用被共享,在ocar1中改变array,ocar2也会相应改变。
2、构造函数不能有参数
4、混合模式
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John"); } Car.prototype.showColor = function() { alert(this.color); }; var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25); oCar1.drivers.push("Bill"); alert(oCar1.drivers); //输出 "Mike,John,Bill" alert(oCar2.drivers); //输出 "Mike,John"
优点:1、解决了上述的不能同时拥有专属的属性和方法和共享属性和方法的问题,通过构造函数来实现instance的专属属性和方法,通过原型实现属性和方法的共享。
2、可以使用instanceof
缺点:1、封装还不够好 没有用
动态原型方法
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John"); if (typeof Car._initialized == "undefined") { Car.prototype.showColor = function() { alert(this.color); }; Car._initialized = true; } }
完美解决上述问题
相关推荐
在"Java Script 经典教程(九)——JavaScript完全网页教程"中,我们将会深入探讨JavaScript的核心概念和实际应用,帮助你全面掌握这个强大的语言。 首先,JavaScript的基础知识包括变量、数据类型和操作符。变量是...
1. Java:Java 是一种面向对象的、跨平台的编程语言,由Sun Microsystems(现为Oracle公司)开发。它的“一次编写,到处运行”(Write Once, Run Anywhere) 理念使得Java代码可以在任何支持Java的平台上运行。在Web...
5. **面向对象编程**:JavaScript支持基于原型的面向对象编程,包括构造函数、原型链和闭包。理解这些概念对于编写可维护和扩展的代码至关重要。 6. **ES6及新特性**:ECMAScript 6(简称ES6)是JavaScript的最新...
这个方法允许我们直接定义对象的属性,包括数据属性和访问器属性,从而实现更细粒度的封装。 6. ES6的类和模块: ES6引入了类的概念,虽然实质上仍然是基于原型的,但提供了更接近传统面向类语法的写法。此外,...
通过实践这些项目,开发者可以逐步提升其JavaScript编程能力,包括函数式编程思维、面向对象编程以及模块化设计等高级技巧。此外,还能学习如何利用JavaScript库和框架,如jQuery、React或Vue,来提高开发效率。在...
- **Java**是一种完全的面向对象语言,这意味着即使是最简单的程序也需要定义类和对象。Java的设计理念强调安全性、可移植性和高性能,特别适合于构建大型的企业级应用。 - **JavaScript**虽然支持面向对象编程,但...
面向对象编程允许我们通过类和对象来组织和管理代码,提高代码的复用性和可维护性。下面将详细探讨JavaScript中的面向对象编程。 一、对象与属性 在JavaScript中,一切皆为对象,包括基本数据类型。我们可以创建...
1. **开发背景**:Java是面向对象的编译型语言,主要适用于网络应用程序开发;JavaScript则是为了增强Web页面功能而生的解释型语言。 2. **编译与解释**:Java代码需要编译成字节码,然后在Java虚拟机上运行;...
6. **面向对象编程**:JavaScript支持类和原型为基础的面向对象编程,理解构造函数、原型链和继承是深入学习的必备。 7. **ES6新特性**:如箭头函数、模板字符串、let和const、解构赋值、Promise等,这些是近年来...
JavaScript语法基于ECMAScript规范,它支持函数式、面向对象和命令式等多种编程范式,使其具有极高的灵活性和可扩展性。 在教学范本中,你将学到以下关键知识点: 1. **基础语法**:包括变量声明(var, let, const...
### JavaScript 快速入门教程与面向对象编程 #### 一、概要 JavaScript 是一种广泛应用于网页...以上内容概述了 JavaScript 快速入门教程与面向对象编程的主要知识点,希望能够帮助初学者更好地理解和掌握这门语言。
4. 类与模块:引入了面向对象的类概念,以及模块化机制。 5. async/await:简化异步编程,使用Promise处理异步操作。 通过本实例教程,读者将全面了解JavaScript的基础知识,并能实际操作和应用各种特效代码,为...
- **类与模块**引入了面向对象编程的类语法和模块系统。 9. **Promise**: Promise是处理异步操作的一种方式,它可以更好地管理回调地狱,使代码更易读和维护。 10. **前端框架与库**: 虽然"JavaScript ...
Java是一种静态类型的、面向对象的编程语言,广泛用于服务器端开发,提供高性能和稳定性的保障。而JavaScript,主要应用于客户端,是动态类型的,主要用于网页和浏览器交互,增强用户体验。 标题中的“Java调用...
- **函数与对象**:JavaScript中的函数不仅可以作为简单的代码块,还可以作为对象的方法使用,这为面向对象编程提供了基础。 - **DOM操作**:文档对象模型(DOM)是JavaScript与HTML页面交互的核心机制,了解如何...
ES6引入的类(class)语法糖使得面向对象编程更加直观,但其实质仍然是基于原型的继承。理解原型链和原型对象对于深入掌握JavaScript至关重要。 数组是处理多个值的数据结构。JavaScript提供了丰富的数组方法,如`...
而Java则是一种面向对象的、跨平台的编程语言,常用于服务器端开发。 在压缩包中,我们可以看到一系列以“tutorial4”和“tutorial5”命名的HTML教程页面,这些页面可能按照章节或主题组织,指导学习者逐步深入...