精华内容
下载资源
问答
  • 本文将探讨一下使用new创建对象与不使用new创建对象的区别,一下面这段代码为例: function Person(name){ this.name = name; console.log(this); return {name:name};//返回对象 } Person.prototype.name = &...

       本文将探讨一下使用new创建对象与不使用new创建对象的区别,一下面这段代码为例:     

    function Person(name){
    	this.name = name;
    	console.log(this);
    	return {name:name};//返回对象
    }
    Person.prototype.name = "Alice";
    var person1 = new Person("Bob");
    var person2 = Person("Alice");
    
    
    console.log(person1);
    console.log(person2);

       运行结果如下:


        如果,我们使用var person2 = Person("Alice");等同于执行了Student函数,在此种情况,函数内部的this,指向的是window;在使用var person1 = new Person("Bob");使用new创建时,那么通过函数内部的console.log(this)可以看到,该this指向了当前的person2。
        将上面的代码进行更改,将返回结果改为基本数据类型,代码如下:

    function Person(age){
    	this.age = age;
    	console.log(this);
    	return age;//如果此处返回的是基本数据类型,则不使用new时,直接返回name数据,使用时返回带有name属性的Person对象
    }
    Person.prototype.name = "20";
    var person1 = new Person("16");
    var person2 = Person("18");
    
    console.log(person1);
    console.log(person2);

    运行结果如下:


        可以看到,对于 不加new 来执行函数来说,返回值,就是函数的执行结果18,对于加new 关键字来执行函数而言,如果return 的是基本数据类型,那么忽视掉该return值,返回的是具有该age属性的Person对象。 


    展开全文
  • 创建对象使用对象——谈谈工厂的作用

    万次阅读 多人点赞 2012-04-30 01:54:54
    ,在本文中我将围绕创建对象使用对象来简单谈谈工厂的作用。 与一个对象相关的职责通常有三类:对象本身所具有的职责、创建对象的职责和使用对象的职责。对象本身的职责比较容易理解,就是对象自身所具有的一些数

          在设计模式的教学和推广过程中,很多企业学员和在校学生经常问我,工厂模式(包括简单工厂模式、工厂方法模式和抽象工厂模式)到底有什么用,很多时候通过反射机制就可以很灵活地创建对象,为毛还要工厂?微笑,在本文中我将围绕创建对象和使用对象来简单谈谈工厂的作用。

          与一个对象相关的职责通常有三类:对象本身所具有的职责、创建对象的职责和使用对象的职责。对象本身的职责比较容易理解,就是对象自身所具有的一些数据和行为,可通过一些公开的方法来实现它的职责。在本文中,我们将简单讨论一下对象的创建职责和使用职责。

          在Java语言中,我们通常有以下几种创建对象的方式:

           (1) 使用new关键字直接创建对象;

           (2) 通过反射机制创建对象;

           (3) 通过clone()方法创建对象;

           (4) 通过工厂类创建对象。

          毫无疑问,在客户端代码中直接使用new关键字是最简单的一种创建对象的方式,但是它的灵活性较差,下面通过一个简单的示例来加以说明: 

    class LoginAction {
    	private UserDAO udao;
    	
    	public LoginAction() {
    		udao = new JDBCUserDAO(); //创建对象
    	}
    	
    	public void execute() {
    		//其他代码
    		udao.findUserById(); //使用对象
    		//其他代码
    	}
    }

          LoginAction类中定义了一个UserDAO类型的对象udao,在LoginAction的构造函数中创建了JDBCUserDAO类型的udao对象,并在execute()方法中调用了udao对象的findUserById()方法,这段代码看上去并没有什么问题。下面我们来分析一下LoginActionUserDAO之间的关系,LoginAction类负责创建了一个UserDAO子类的对象并使用UserDAO的方法来完成相应的业务处理,也就是说LoginAction即负责udao的创建又负责udao的使用,创建对象和使用对象的职责耦合在一起,这样的设计会导致一个很严重的问题:如果在LoginAction中希望能够使用UserDAO的另一个子类如HibernateUserDAO类型的对象,必须修改LoginAction类的源代码,违反了“开闭原则”。如何解决该问题?

          最常用的一种解决方法是将udao对象的创建职责从LoginAction类中移除,在LoginAction类之外创建对象,那么谁来负责创建UserDAO对象呢?答案是:工厂类。通过引入工厂类,客户类(如LoginAction)不涉及对象的创建,对象的创建者也不会涉及对象的使用。引入工厂类UserDAOFactory之后的结构如图1所示:

    1 引入工厂类之后的结构图

           工厂类的引入将降低因为产品或工厂类改变所造成的维护工作量。如果UserDAO的某个子类的构造函数发生改变或者要需要添加或移除不同的子类,只要维护UserDAOFactory的代码,而不会影响到LoginAction;如果UserDAO的接口发生改变,例如添加、移除方法或改变方法名,只需要修改LoginAction,不会给UserDAOFactory带来任何影响。

           在所有的工厂模式中,我们都强调一点:两个类AB之间的关系应该仅仅是A创建B或是A使用B,而不能两种关系都有。将对象的创建和使用分离,也使得系统更加符合“单一职责原则”,有利于对功能的复用和系统的维护。

           此外,将对象的创建和使用分离还有一个好处:防止用来实例化一个类的数据和代码在多个类中到处都是,可以将有关创建的知识搬移到一个工厂类中,这在Joshua Kerievsky的《重构与模式》一书中有专门的一节来进行介绍。因为有时候我们创建一个对象不只是简单调用其构造函数,还需要设置一些参数,可能还需要配置环境,如果将这些代码散落在每一个创建对象的客户类中,势必会出现代码重复、创建蔓延的问题,而这些客户类其实无须承担对象的创建工作,它们只需使用已创建好的对象就可以了。此时,可以引入工厂类来封装对象的创建逻辑和客户代码的实例化/配置选项。

          使用工厂类还有一个“不是特别明显的”优点,一个类可能拥有多个构造函数,而在JavaC#等语言中构造函数名字都与类名相同,客户端只能通过传入不同的参数来调用不同的构造函数创建对象,从构造函数和参数列表中也许大家根本不了解不同构造函数所构造的产品的差异。但如果将对象的创建过程封装在工厂类中,我们可以提供一系列名字完全不同的工厂方法,每一个工厂方法对应一个构造函数,客户端可以以一种更加可读、易懂的方式来创建对象,而且,从一组工厂方法中选择一个意义明确的工厂方法,比从一组名称相同参数不同的构造函数中选择一个构造函数要方便很多。如图2所示:

            在图2中,矩形工厂类RectangleFactory提供了两个工厂方法createRectangle()createSquare(),一个用于创建长方形,一个用于创建正方形,这两个方法比直接通过构造函数来创建长方形或正方形对象意义更加明确,也在一定程度上降低了客户端调用时出错的概率。

          那么,有人可能会问,是否需要为设计中的每一个类都配备一个工厂类?答案是:具体情况具体分析。如果产品类很简单,而且不存在太多变数,其构造过程也很简单,此时无须为其提供工厂类,直接在使用之前实例化即可,例如Java语言中的String类,我们就无须为它专门提供一个StringFactory,这样做反而有点像杀鸡用牛刀,大材小用,而且会导致工厂泛滥,增加系统的复杂度。

    【作者:刘伟  http://blog.csdn.net/lovelion

    展开全文
  • 使用对象字面量创建对象

    千次阅读 2016-08-14 16:03:45
    今天在学习《js高程》时看到了使用对象字面量创建对象的表示法,了解到对象字面变量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程,举一个简单的例子var person = {name : "tom",age : 21};...

    今天在学习《js高程》时看到了使用对象字面量创建对象的表示法,了解到对象字面变量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程,举一个简单的例子var person = {name : "tom",age : 21};

    这里,左边的花括号表示对象字面变量的开始,因为它出现在了表达式上下文中。然后我们定义了name属性,之后是一个冒号,再后面是这个属性的值。在对象字面量中,使用逗号来分隔不同的属性,因此“tom”后面是一个逗号,但是在age属性的值29的后面不能添加逗号,因为age是这个对象的最后一个属性。在最后一个属性后面添加逗号,会在IE7以及更早版本和Opera中导致错误。

    在使用对象字面量语法时,属性名也可以使用字符串,如下面这个例子:var person = {"name" : "tom", "age" : 21, 5 : true};这个例子会创建一个对象,包含三个属性:name,age和5,但这里的数值属性名会自动转换为字符串。

    另外,使用对象字面量语法时,如果留空其花括号,则可以定义为只包含默认属性和方法的对象,如下所示:var person = { };person.name = "tom";person.age=21;这个例子与本节前面的例子是等价的,只不过看起来似乎有点奇怪。

    以下是我另外找的补充:

    原文地址:http://www.w3cplus.com/javascript/create-an-object-methods.html

    对象是JavaScript的基本数据类型。在JavaScript中除了字符串、数字、truefalsenullundefined之外的值都是对象。所以,学习JavaScript不把对象学习明白要继续往下学习就非常的困难。从今天开始进入对象的学习中。

    概述

    在JavaScript中对象是一种基本的数据类型,在数据结构上是一种散列表,可以看作是属性的无序集合,除了原始值其他一切都是对象。可通过属性名访问这些值,而属性名可以是包含空字符在内的任意字符串。简单点说,一个对象就是一系列属性的集合,一个属性包含一个名字(key)和一个值(value)。

    理解什么是JavaScript对象,你可以这样来想。在JavaScript中,一个对象就是一个具有属性的特体。就拿你看到的一妹子,这妹子就是一个对象,她有自己的属性。比如妹子身高,年龄,姓名等。同样,在JavaScript中,也可以用属性来给对象定义它的特征。

    创建对象

    既然要学习对象,那得先要有一个对象,这样问题就来了,JavaScript中对象要怎么创建呢?接下来就来看看在JavaScript中如何创建对象。

    很多有关于JavaScript书在介绍对象创建的方法时,主要有:

    • 使用对象字面量创建对象(key-value)
    • 使用new创建对象
    • 使用Object.create()创建对象
    • 使用函数创建对象
    • 使用原型创建对象

    使用对象字面量创建对象

    对象字面量是创建对象最简单的一种形式,目的是在于简化创建包含大量属性的对象的过程。对象字面量由若干属性名(keys)和属性值(values)成对组成的映射表,keyvalue中间使用冒号(:)分隔,每对key/value之间使用逗号(,)分隔,整个映射表用花括号({})括起来。

    通过对象字面量创建对象的语法如下:

    var obj = {
        property_1:   value_1,   // property_# 可能是一个标识符...
        2:            value_2,   // 或者是一个数字
        // ...,
        "property n": value_n    // 或是一个字符串
    };
    

    这里obj是创建的对象的名称,每一个property_i是一个标识符(可以是一个名称、数字或字符串字面量),并且每个value_i是一个其值,并且将这个值赋予给property_i。来看一个具体实例:

    var girl = {
        'name': '欣欣',
        'age' : 18,
        'height': 175,
        'weight': 45
    }
    

    这个示例创建了一个名为girl的对象,对象有四个属性nameageheightweight。这四个属性对应有一个属性值。

    使用对象字面量创建对象时,如果留空其花括号({}),则可以定义只包含默认属性和方法的对象。如:

    var obj = {}
    

    使用这种方式创建的对象时,可以通过点(.),也就是obj.key给对象obj创建对象属性,并且赋予对象的属性值。另外也可以通过方括号([]),也就是obj['key']给对象obj创建对象属性,并且赋予对象的属性值。如下面的示例:

    var girl = {};
    girl.name = '欣欣';
    girl.age = 18;
    girl['height'] = 175;
    girl['weight'] = 45;
    

    此时在Chrome中打印girl对象时,输出的结果如下所示:

    console.log(girl);
    //Object {name: "欣欣", age: 18, height: 175, weight: 45}
    

    使用new创建对象

    使用new操作符后跟Object构造函数(有关于构造函数,后面再讲)也可以创建对象:

    var obj = new Object(); // 和 obj = {}相同
    

    虽然初始状态下,obj是一个空对象,但在JavaScript中可以很方便地动态添加和使用成员,所以我们可以不断加入成员变量和方法。如:

    var girl = new Object();
    girl['name'] = '欣欣';
    girl['age'] = 18;
    girl['height'] = 175;
    girl['weight'] = 45;
    

    使用Object.create()创建对象

    对象也可以用Object.create()方法创建。该方法非常有用,因为它允许你为创建的对象选择其原型对象,而不用定义一个构造函数。

    Object.create()方法创建一个拥有指定原型和若干个指定属性的对象。

    Object.create(proto, [ propertiesObject ])
    

    Object.create()方法创建一个对象,其接受两个参数,其中第一个参数是这个对象的原型对象proto;第二个是一个可选参数,用以对对象的属性做进一步描述。这个方法使用很简单:

    var obj1 = Object.create({
        x: 1,
        y: 2
    });    //对象obj1继承了属性x和y
    var obj2 = Object.create(null);    //对象obj2没有原型
    

    如果 proto 参数不是 null 或一个对象值,则抛出一个 TypeError 异常。

    有关于Object.create()方法更多的示例可以点击这里进行了解

    使用函数创建对象

    在实际使用当中,字面量创建对象虽然很有用,但是它并不能满足我们的所有需求,我们希望能够和其他后台语言一样创建一个类,然后声明类的实例就能够多次使用,而不用每次使用的时候都要重新创建它。

    因为JavaScript没有类,一般都是使用函数来定义一个类似其他语言中的类格式,比如:

    function Person() {
        this.name = "mary"; // 为这个类添加一个成员变量name,并为这个成员变量赋默认值
        this.age = 5;
        this.sayHello = function () {
            console.log(this.name + " : " + this.age);
        };
    }
    

    定义好类之后,我们就可以像下面这样创建和使用对象:

    var person1 = new Person();
    person1.name = 'Tom';
    person1.age = 20;
    person1.sayHello(); // Tom : 20
    
    var person2 = new Person();
    person2.name = 'W3cplus';
    person2.age = 5;
    person2.sayHello(); // W3cplus : 5
    

    Person()函数不是用来被调用的,它是用来被new用的。

    通过原型创建对象

    这种方法比较前几种方法来说算是最为复杂,最为高级的方法。这里还涉及到封装的一些知识(有关于这些后续学习到了再记录)。这里简单看看如何通过原型创建对象。

    首先像函数方法创建对象一样,先定义一个函数:

    function Person() {
        this.name = "W3cplus";
        this.age = 5;
        this.walk = function () {
            console.log("一个前端网站...");
        };
    }
    

    然后在外部可以扩允成员:

    //添加成员方法
    Person.prototype.sayHello = function () {
        console.log("hello");
    };
    //也可以添加成员属性,
    Person.prototype.height = 100;
    

    一方面,原型可以扩充原有类的功能(特别是添加有用方法),也可以像下面这样写:

    function Person() { }
    
    Person.prototype.name = "W3cplus";
    Person.prototype.age = 5;
    Person.prototype.walk = function () {
        console.log("一个前端网站...");
    };
    
    Person.prototype.sayHello = function () {
        console.log("hello");
    };
    Person.prototype.height = 100;
    

    属性访问

    对象属性访问一般有两种方法,第一种是使用点(.)表示法,这也是最常用的一种方法,也是很多面向对象语言中通用的语法。第二种方法还可以使用中括号([])表示法来访问对象的属性。在使用中括号语法时,应该将要访问的属性以字符串的形式放在中括号中。如下:

    person['name'];
    person.name;
    

    从功能上来说,上面两种方法访问对象属性没有任何区别。但中括号语法的主要优点有两个:

    可能通过变量访问属性,如下:

    var propertyName = 'name';
    person[propertyName];
    

    另外一个优点是,如果属性名中包含了会导致语法错误的字符或者属性名使用的是关键字或保留字,可以使用中括号访问属性,如下:

    person['first name'];
    

    一般情况之下,除非必须使用亦是来访问对象属性,否则建议使用点(.)的方法来访问对象属性。

    总结

    对象是JavaScript的基本数据类型,如果要更好的往下学习JavaScript相关的知识,很有必要先把对象整明白。这篇主要介绍了几种创建对象的方法。较为简单的是通过字面量({})和new Object()方法创建,但这两种方法创建的对象复用性较差;使用Object.create()创建对象时不需要定义一个构造函数就允许你在对象中选择其原型对象。除了这几种方法还可以使用函数和原型创建对象,而这两种方法相对来说可复用性强,只是使用较为复杂。

    展开全文
  • Kotlin 创建对象

    千次阅读 2019-05-08 21:37:21
    在java中创建一个对象 可以使用new关键字 类名 对象名 = new 类名(); 例如 LocationService ls = new LocationService(); 注意 Kotlin 没有new关键字。 可以如下创建 var ls = LocationService() 也就是 ...

    在java中创建一个对象 可以使用new关键字

    类名 对象名 = new 类名();

    例如

    LocationService ls = new LocationService();

    注意 Kotlin 并没有 new 关键字

    可以如下创建

     var  ls = LocationService()

    也就是  类型  对象名 = 类名() 

    类型 可以使用var 或者val 

    展开全文
  • Java创建对象详解:Java创建对象的几种方法

    万次阅读 多人点赞 2019-05-10 20:01:32
    Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。 显式创建对象 对象的显式创建方式有 4 种。 1. 使用 new 关键字创建对象 这是常用的创建...
  • java使用反射创建对象

    万次阅读 2016-10-08 17:12:41
    Class对象中包括构造器(Constructor)、属性(Field)、方法(Method)。...这个方法是使用Class对象对应类的默认构造器创建对象,这就要求Class对象对应类必须要有默认构造器。 2、使用Class对象获取指定
  • scala不使用new关键字创建对象实例

    千次阅读 2017-07-17 22:23:41
    在scala中,scala不使用new关键字创建对象实例,一般有2中方法: 1. 为类创建伴生对象,在伴生对象内按照所需的构造函数签名定义一个apply方法; 2.将类定义为case类。 1)用apply方法创建一个伴生对象: ...
  • 今天在牛客网讨论区看到了一个题目:如何实现一个函数,可以使用new操作符创建对象,也可以直接使用创建对象? 当时有点懵,回头翻了翻《JS高程》,发现里面的工厂模式和寄生构造函数模式的代码不就是这个题目的...
  • 使用js动态循环创建对象

    千次阅读 2018-07-26 13:41:28
    $.each($('input:checkbox:checked'),function(index){ window["url"+index]=""+$(this).val()+"&...以上就是动态创建的代码,主要就是window["url"+...
  • JS中使用工厂模式创建对象

    万次阅读 2021-05-13 10:15:57
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body>... //创建一个新的对象 var obj = ne
  • Java中使用枚举创建对象

    万次阅读 2018-06-08 18:07:55
    创建无参对象public enum Direction { FRONT ,BEHIND,LEFT,RIGHT; }创建有参对象public enum Directions{ FRONT("前") { @Override public void show() { System.out.println("前"); ...
  • 经常在java程序员面试的...【答案】第一行代码创建了1个对象,第二行代码创建了2个对象;【解析】首先 String strA = "abc"; 创建了一个对象StrA并且把“abc”在内存中的地址赋值给了对象StrA,所以这个...
  • JavaScript 使用new创建一个对象的过程

    千次阅读 2018-10-01 12:30:54
    【学习参考】 创建对象有几种方法? 面向对象的小九九 new运算符 JavaScript (new)创建一个对象的过程 用关键字new创建对象 new都做了什么(随笔)
  • 主要处理的问题:统计一个类中创建对象的个数 1、在类中设置一个static的int变量,每次创建一个对象时,count加1。 staic int count=0; Person(){++count;} 2、 同时要让对象的id递增,只需把count加1的...
  • java对象数组 创建对象数组,初始化对象数组

    万次阅读 多人点赞 2019-07-30 16:34:15
    对象数组的定义和使用对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 对象数组的声明形式是: 类名 对象数组名 [ ]; 为对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :...
  • ECMA-262把对象定义为:”无需属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说明对象是一组没有特定顺序... 创建自定义对象最简单的方式就是创建一个Object的实例,然后再为他添加属性和方
  • C++ 创建对象,删除对象

    万次阅读 2019-04-24 15:52:19
    有两种方法创建对象: 方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。 注意:为节省存储空间,C++创建对象时仅分配用于保存数据...
  • java 对象创建使用和清除

    万次阅读 2016-05-03 15:58:36
    java提供了new运算符和构造方法用于创建对象,格式如下: type objectName = constructor(...); type 是对象的类型,即对象的类或接口。 objectName是对象名,即引用对象的变量。 constructor(...)用于初始化...
  • JavaScript创建对象的4种方法

    千次阅读 2018-11-28 15:02:24
    JavaScript 创建对象的4种方法 ...Object()是JavaScript内部的对象,使用Object创建对象的语法: 我们通过Object创建的一个Dog对象,这个对象有name,color,eat属性;并且给这个对象定义了两个方法,因此我们...
  • 如何在Servlet中创建使用application对象 要在Servlet中创建使用application对象其实很简单如下: this.getServletContext.setAttribute("…","…"); 注意: this.getServletContext这个方法的...
  • new一个类对象使用类名创建一个对象有什么区别? 用new来给一个类的对象分配空间,和使用类名称来定义一个类的对象,有什么区别?难道区别只是new的返回值是个指针,而对象定义得到的是变量名么?或者是在存储...
  • Java中创建对象的5种方式

    万次阅读 2016-07-20 10:25:08
    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。 Java中有5种创建对象的方式,下面给出它们的例子还有它们...
  • Java中创建对象的几种方式

    千次阅读 2017-05-19 10:10:00
    Java开发中,我们每天会创建很多对象,也会使用依赖注入的方式管理系统,比如:Spring去创建对象。然后究竟有多少种创建对象的方法呢? 这里列举一下:使用New关键字、使用Class类的newInstance方法、使用...
  • 在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。要求如下: 使用静态工厂创建Bean对象使用动态工厂创建Bean对象。 实现思路: 在com.mhys.bean包下,创建Card...
  • Java有哪些创建对象的方式? 1、用new关键字创建对象,需要使用构造器。 2、使用反射机制创建对象,用Class类或Constructor类的newInstance()方法。 3、通过object类的clone方法 4、使用反序列化
  • 在js中使用createElement创建HTML对象和元素
  • 变量和对象存在内存中的不同部分,通过连接相关联。变量总是连接到对象,并且绝不会连接到其他变量上,但是更大的对象可能连接到其他的对象(例如一个列表对象能够连接到它所包含的对象)。python中从变量到对象的...
  • spring创建对象的三种方式详解

    万次阅读 2018-01-18 17:29:37
    前言我们知道spring框架的核心就是IOC容器了,那么IOC容器主要的作用就是创建对象和处理对象之间的依赖关系。本文主要讲解IOC容器创建对象的三种方式。创建对象的三种方式1) 调用无参数构造器 2) 带参数构造器 3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,570,306
精华内容 1,828,122
关键字:

创建对象并使用