`

JS中定义对象的几种方式

 
阅读更多

    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中定义对象的几种方式.pdf

    在讨论JavaScript中定义对象的几种方式之前,我们先理解一下JavaScript中的对象到底是什么。JavaScript是一种基于原型的编程语言,对象是其核心概念之一。对象可以被视为一个容器,存储各种键值对集合,键为属性名,...

    JavaScript定义类的几种方式总结

    JavaScript定义类的几种方式包括工厂方式、构造函数和原型方式,每种方法都有其特点和适用场景,接下来我们将详细探讨。 工厂方式是最早期的面向对象编程在JavaScript中的实践之一。使用工厂方式定义类,本质上就是...

    JavaScript定义类或函数的几种方式小结

    JavaScript中定义类或函数,主要有以下几种方式: 1. 工厂方式 工厂方式是JavaScript中创建对象的一种模式,它通过一个工厂函数来封装创建对象的代码。通过工厂函数,我们可以创建多个具有相同属性和方法的对象实例...

    【JavaScript源代码】详解js创建对象的几种方式和对象方法.docx

    本文将深入探讨JavaScript中创建对象的几种常见方式以及对象方法。 首先,我们来看“工厂模式”。工厂模式是一种创建对象的抽象方式,通过一个函数来返回一个新的对象。例如: ```javascript function getObj(name...

    JavaScript学习之二 — JavaScript创建对象的8种方式

    本文将深入探讨JavaScript创建对象的8种常见方式,帮助你更好地理解和掌握这门动态类型的编程语言。 1. **字面量(Literal)方式** 这是最简单直接的创建对象的方式,通过大括号{}来定义一个对象,然后在内部用...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式).docx

    ### JavaScript面向对象之常见创建对象的方式 #### 引言 JavaScript 的灵活性体现在其创建对象的多种方式上。本文将详细介绍三种常见的对象创建方法:工厂模式、构造函数模式以及原型模式,并探讨它们各自的优缺点...

    关于JavaScript定义类和对象的几种方式

    在JavaScript中,定义对象的几种方式有直接量方式、工厂方式和原型方式。 直接量方式是最简单直接的定义对象的方法,即直接用花括号定义对象并填充属性和方法。例如: ```javascript var Obj = { name: 'sun', ...

    JS定义函数的几种常用方法小结

    本文实例讲述了JS定义函数的几种常用方法。分享给大家供大家参考,具体如下: 在 JavaScript 语言里,函数是一种对象,所以可以说函数是 JavaScript 里的一等公民(first-class citizens)。 之前我们这样定义过一个...

    JS创建对象的几中方式

    在JavaScript中,创建对象有多种方法,每种方式都有其优缺点。以下是对这些方法的详细解释: 1. **工厂方式**: 工厂函数是通过一个函数来创建对象,它可以根据需要设置属性和方法。然而,这种方法的缺点是每个...

    JS 创建对象(常见的几种方法)

    JavaScript还有许多其他创建对象的方法,例如ES6中的class关键字,它提供了一种更清晰和更简洁的方式来定义对象和它们的构造函数。ES6的class背后实际上依然是使用原型链实现的。 除了创建对象的方法之外,本文还...

    javascript面向对象编程的几种模式详解

    以下是对标题和描述中提到的几种JavaScript面向对象编程模式的详细解释: 1. **构造函数与字面量结合模式** 在JavaScript中,我们可以通过构造函数和字面量语法来创建对象。构造函数用于定义对象的类型,而字面量...

    js创建对象几种方式的优缺点对比

    本文将详细对比JavaScript创建对象的五种常见方式:工厂模式、构造函数、原型方法、构造函数与原型方法的组合以及动态原型方法,分析它们的优缺点。 1. 工厂模式: 工厂模式是一种创建对象的方式,通过函数来创建...

    在javascript中创建对象的各种模式解析

    在JavaScript中创建对象主要涉及以下几种模式: 1. 工厂模式 工厂模式是最早期的对象创建方式之一,它通过一个函数来创建对象,并返回新创建的对象。这种方法的核心是利用函数封装创建对象的细节,然后通过返回值来...

    在js中创建类和对象

    本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的对象。在JavaScript中,我们可以定义一个函数,如`...

    JavaScript中函数对象调用模式总结

    JavaScript中的函数对象调用模式是编程中至关重要的概念,它涉及到函数作为一等公民、作用域、闭包、原型链等多个核心知识点。这篇博客通过深入分析JavaScript中的函数调用模式,帮助开发者更好地理解和掌握这些概念...

    javascript创建对象的方式(一)

    这篇博文主要探讨了JavaScript创建对象的几种常见方式,这对于理解和掌握JavaScript面向对象编程至关重要。在实际开发中,了解并灵活运用这些方法能够提高代码的可读性和可维护性。下面,我们将详细讲解标题中提到的...

    JS对象创建的几种方式整理

    最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式。话不多说,直接步入正题。 第一种:Object构造函数创建 var Person = new Object(); Person.name = 'Nike'; Person.age = 29; 这行代码创建...

Global site tag (gtag.js) - Google Analytics