1. 基于已有对象扩充其对象和方法(只适合于临时的生成一个对象):
<html> <head> <title>基于已有对象扩充其对象和方法(只适合于临时的生成一个对象)</title> </head> <script> var obj = new Object(); obj.name="userObject"; obj.printName = function(name){ this.name = name; alert(this.name); } obj.printName("newUserObject"); </script> <body> </body> </html>
2.工厂方式创建对象(每次创建一个object后,其中对应的方法(本例中是get)也被创建一次,方法不能被所创建的所有对象(本例中是obj1和obj2)共享):
a.
<html> <head> <title>工厂方式创建对象</title> </head> <script> function createObject(){ var obj = new Object(); obj.name="userObject"; obj.password = "12345"; obj.get = function(){ alert(this.name + ", " + this.password); } return obj; } var obj1 = createObject(); var obj2 = createObject(); obj1.get(); obj2.get(); </script> <body> </body> </html>
b.带参数的构造方法:
<html> <head> <title>工厂方式创建对象</title> </head> <script> function createObject(username,password){ var obj = new Object(); obj.username = username; obj.password = password; obj.get = function(){ alert(this.username + ", " + this.password); } return obj; } var obj1 = createObject("zhangsan","123456"); obj1.get(); </script> <body> </body> </html>
c.让函数被多个创建的对象所共享,而不是每一个对象都创建一个相同的函数(缺点:对象定义本身和方法分离了):
<html> <head> <title>工厂方式创建对象</title> </head> <script> function get(){ alert(this.username + ", " + this.password); } function createObject(username,password){ var obj = new Object(); obj.username = username; obj.password = password; obj.get = get; return obj; } var obj1 = createObject("zhangsan","123456"); var obj2 = createObject("lisi","54321"); obj1.get(); obj2.get(); </script> <body> </body> </html>
3.构造函数方式:
a.
<html> <head> <title>构造函数方式创建对象</title> </head> <script> function Person(){ this.username = "zhangsan"; this.password = "123"; this.getInfo = function(){ alert(this.username + ", " + this.password); } } var person = new Person(); person.getInfo(); </script> <body> </body> </html>
b.可以在构造函数是传递参数:
<html> <head> <title>构造函数方式创建对象</title> </head> <script> function Person(username,password){ this.username = username; this.password = password; this.getInfo = function(){ alert(this.username + ", " + this.password); } } var person = new Person("zhangsan","123"); person.getInfo(); </script> <body> </body> </html>
4.使用原型(prototype)方式创建对象:
优点:创建的多个对象共享同一个方法(getInfo)
缺点:创建的多个对象在共享同一个方法的同时也共享了同样的属性(username,password),实际开发中这样儿是不行的,必须是多个对象都要有自己的属性。
采用该方式创建对象通常是用来扩展已有对象的某一个方法。
a.
<html> <head> <title>使用原型(prototype)方式创建对象</title> </head> <script> function Person(){} Person.prototype.username = "zhangsan"; Person.prototype.password = "123"; Person.prototype.getInfo = function(){ alert(this.username + ", " + this.password); } var person = new Person(); var person2 = new Person(); person.username = "lisi"; person.getInfo(); person2.getInfo(); </script> <body> </body> </html>
b.如果使用原型方式创建对象,那么生成的所有对象将会共享原型中的属性,这样儿一个对象改变了该属性也会反应到其他的对象上:
<html> <head> <title>使用原型(prototype)方式创建对象</title> </head> <script> function Person(){} Person.prototype.username = new Array(0); Person.prototype.password = "123"; Person.prototype.getInfo = function(){ alert(this.username + ", " + this.password); } var person = new Person(); var person2 = new Person(); person.username.push("zhangsan"); person.username.push("lisi"); person.password = "456"; person.getInfo(); person2.getInfo(); </script> <body> </body> </html>
c.使用原型和构造函数方式来创建对象:
<html> <head> <title>使用原型(prototype)方式创建对象</title> </head> <script> function Person(){ this.username = new Array(); this.password = "123" } Person.prototype.getInfo = function(){ alert(this.username + ", " + this.password); } var person = new Person(); var person2 = new Person(); person.username.push("zhangsan"); person.username.push("lisi"); person.getInfo(); person2.getInfo(); </script> <body> </body> </html>
5.动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。
<html> <head> <title>动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性</title> </head> <script> function Person(){ this.username = "zhangsan"; this.password = "123"; if(typeof Person.flag == "undefined"){ Person.prototype.getInfo = function(){ alert(this.username + ", " + this.password); } Person.flag = true; } } var p = new Person(); var p2 = new Person(); p.getInfo(); p2.getInfo(); p.username="lisi"; p.getInfo(); p2.getInfo(); </script> <body> </body> </html>
相关推荐
Javascript对象定义的几种方式
在讨论JavaScript中定义对象的几种方式之前,我们先理解一下JavaScript中的对象到底是什么。JavaScript是一种基于原型的编程语言,对象是其核心概念之一。对象可以被视为一个容器,存储各种键值对集合,键为属性名,...
JavaScript定义类的几种方式包括工厂方式、构造函数和原型方式,每种方法都有其特点和适用场景,接下来我们将详细探讨。 工厂方式是最早期的面向对象编程在JavaScript中的实践之一。使用工厂方式定义类,本质上就是...
JavaScript中定义类或函数,主要有以下几种方式: 1. 工厂方式 工厂方式是JavaScript中创建对象的一种模式,它通过一个工厂函数来封装创建对象的代码。通过工厂函数,我们可以创建多个具有相同属性和方法的对象实例...
本文将深入探讨JavaScript中创建对象的几种常见方式以及对象方法。 首先,我们来看“工厂模式”。工厂模式是一种创建对象的抽象方式,通过一个函数来返回一个新的对象。例如: ```javascript function getObj(name...
本文将深入探讨JavaScript创建对象的8种常见方式,帮助你更好地理解和掌握这门动态类型的编程语言。 1. **字面量(Literal)方式** 这是最简单直接的创建对象的方式,通过大括号{}来定义一个对象,然后在内部用...
### JavaScript面向对象之常见创建对象的方式 #### 引言 JavaScript 的灵活性体现在其创建对象的多种方式上。本文将详细介绍三种常见的对象创建方法:工厂模式、构造函数模式以及原型模式,并探讨它们各自的优缺点...
在JavaScript中,定义对象的几种方式有直接量方式、工厂方式和原型方式。 直接量方式是最简单直接的定义对象的方法,即直接用花括号定义对象并填充属性和方法。例如: ```javascript var Obj = { name: 'sun', ...
本文实例讲述了JS定义函数的几种常用方法。分享给大家供大家参考,具体如下: 在 JavaScript 语言里,函数是一种对象,所以可以说函数是 JavaScript 里的一等公民(first-class citizens)。 之前我们这样定义过一个...
在JavaScript中,创建对象有多种方法,每种方式都有其优缺点。以下是对这些方法的详细解释: 1. **工厂方式**: 工厂函数是通过一个函数来创建对象,它可以根据需要设置属性和方法。然而,这种方法的缺点是每个...
JavaScript还有许多其他创建对象的方法,例如ES6中的class关键字,它提供了一种更清晰和更简洁的方式来定义对象和它们的构造函数。ES6的class背后实际上依然是使用原型链实现的。 除了创建对象的方法之外,本文还...
以下是对标题和描述中提到的几种JavaScript面向对象编程模式的详细解释: 1. **构造函数与字面量结合模式** 在JavaScript中,我们可以通过构造函数和字面量语法来创建对象。构造函数用于定义对象的类型,而字面量...
本文将详细对比JavaScript创建对象的五种常见方式:工厂模式、构造函数、原型方法、构造函数与原型方法的组合以及动态原型方法,分析它们的优缺点。 1. 工厂模式: 工厂模式是一种创建对象的方式,通过函数来创建...
在JavaScript中创建对象主要涉及以下几种模式: 1. 工厂模式 工厂模式是最早期的对象创建方式之一,它通过一个函数来创建对象,并返回新创建的对象。这种方法的核心是利用函数封装创建对象的细节,然后通过返回值来...
本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的对象。在JavaScript中,我们可以定义一个函数,如`...
JavaScript中的函数对象调用模式是编程中至关重要的概念,它涉及到函数作为一等公民、作用域、闭包、原型链等多个核心知识点。这篇博客通过深入分析JavaScript中的函数调用模式,帮助开发者更好地理解和掌握这些概念...
这篇博文主要探讨了JavaScript创建对象的几种常见方式,这对于理解和掌握JavaScript面向对象编程至关重要。在实际开发中,了解并灵活运用这些方法能够提高代码的可读性和可维护性。下面,我们将详细讲解标题中提到的...
最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式。话不多说,直接步入正题。 第一种:Object构造函数创建 var Person = new Object(); Person.name = 'Nike'; Person.age = 29; 这行代码创建...