<script>
//    常见的三种创建对象的方式
//    1.通过”字面量“方式创建var a={name:'詹姆斯'}console.log(a)/**************************************工厂模式****************************************************/
//上面的方式中通过字面量或者new 等方式只能创建单一的对象
//    3.工厂模式(就是写一个函数,函数里面return 对象出来,可以反复调用)function Person() {var person=new Object()person.name='安东尼'person.age=33return person}var andongni=Person()console.log(andongni)//这就是工厂模式,说白了还是一个对象,只不过这个对象是通过函数return 出来的,变量接受这个函数就相当于变量=对象//        上面这个工厂模式在改动一下function PersonBaby(name,age) {var person=new Object()person.name=name||'我是默认的名字'//默认不传递参数对应的默认的name,待会文章末尾会有一个链接教你的person.age=age||23return person}var andongniBaby=PersonBaby()console.log(andongniBaby)//age: 23 name: "我是默认的名字"  这是不传递参数的情况下var boss=PersonBaby('boss',55)console.log(boss,'有参数的情况下肯定取参数啊')/**********************************构造函数********************************************************///  3.通过”构造函数“方式创建。特点  开头是大写的哟
function Person() {this.name = "dongjc";    //通过this关键字设置默认成员var worker = 'coding';    //没有this关键字,对象创建后,该变量为非成员,不会出现在新建的对象里面this.age = 32;this.Introduce = function () {alert("My name is " + this.name + ".I'm " + this.age);};console.log("My name is " + this.name + ".I'm " + this.age);
};
var person = new Person();
console.log(person)
//当然你也可以不固成员,同工厂模式一样写参数//此代码一共会两次console,原因在于创建对象是自动执行了该函数。
//注意:this关键字的使用。这里的this与php中话法意思类似,指调用该函数的对象,这里指的是person。/*
* 与工厂模式相比,具有以下特点:没有显式创建对象;直接将属性和方法赋给了this对象;没有return语句;要创建新实例,必须使用new操作符;(否则属性和方法将会被添加到window对象)可以使用instanceof操作符检测对象类型构造函数的问题:构造函数内部的方法会被重复创建,不同实例内的同名函数是不相等的。可通过将方法移到构造函数外部解决这一问题,但面临新问题:封装性不好。这些问题可通过原型模式解决。
* */
/*********************************原型模式**********************************************/
//原型模式 说白了就是弄个构造函数然后改变这个构造函数的prototype,然后在new 这个构造函数
function Baby(){
}
//如果我这里吧Baby 改成小写行不行呢?说白了这就是考构造函数和普通函数的区别
Baby.prototype.name="bitch";
Baby.prototype.age=29;
Baby.prototype.sayName=function(){console.log(this.name,'我是原型模式里面的sayName函数')
};
var person1=new Baby();
console.log(person1,'我是Baby 原型模式new出来的')
person1.sayName();//"bitch"
</script>

  

上面两处标红的地方,先解释第二个

构造函数和普通函数的区别

  任何函数,只要通过 new 操作符来调用,那它就可以作为构造函数 ;构造函数开头大写

  任何函数,如果不通过 new 操作符来调用,那它跟普通函数也没有什么两样。开头小写

   function Person(name,age,job){this.name = name;this.sayName = function(){alert(this.name);}}//当做构造函数使用var person = new Person('Nicholas');//this-->personperson.sayName();//'Nicholas'//当做普通函数调用Person('Greg');//this-->windowwindow.sayName();//'Greg'

  构造函数当普通函数调用的话 this 指向window,当构造函数调用,this指向实例化这个变量,为啥this的指向不同呢?

原因:构造函数内部会创建一个实例,调用普通函数时则不会创建新的对象。构造函数内部的this指向是新创建的person实例,而普通函数内部的this指向调用函数的对象(如果没有对象调用,默认为window)

默认不传递参数对应的默认的name,待会文章末尾会有一个链接教你的(我的下一篇文章) https://www.cnblogs.com/myfirstboke/p/10438890.html   

转载于:https://www.cnblogs.com/myfirstboke/p/10438756.html

关于创建对象的几个问题,拨云见日相关推荐

  1. spring IOC创建对象方式

    spring IOC创建对象方式 通过无参构造来创建 验证方法: 创建实体类: public class User {private String name;public User() {System ...

  2. Java快速创建大量对象_3分钟 快速理解JVM创建对象的步骤!

    原标题:3分钟 快速理解JVM创建对象的步骤! 我们平时创建一个对象只需要new.然而我们知道对象的创建到底经历了哪些呢?实际上只不过仅仅的3步就完成了.先来看看完整的创建过程,再来一步一步的分析. ...

  3. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  4. python创建对象的格式为_Python入门基础学习(面向对象)

    python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  5. JavaScript创建对象的两种方法和遍历对象的属性

    创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例 1.定义并创建对象的实例 var person=new Object(); person.firstnam ...

  6. String创建对象的个数 StringBuffer

    String name1 = "Tom"; //创建了一个String类型的对象 String name2 = "Lu"+"cy"; //创 ...

  7. 使用hql动态创建对象问题

    前段时间由于需求要添加报表数据,调整ireport后,打印pdf文件出现数据错位的情况,调试发现不是ireport问题,就查看了后台传送的数据,最后发现传送的对象属性值已经就是错位的,那就是获取对象时 ...

  8. 用模板实现单例模式(线程安全)、模板方式实现动态创建对象

    一.用模板实现单例模式 在前面的文章中,用过多种方法实现单例模式,现在用模板方式来实现: 为了实现线程安全,需要在linux 下使用pthread_mutex_t 加锁,请使用g++ 编译并需要链接 ...

  9. JavaScript创建对象–如何在JS中定义对象

    Objects are the main unit of encapsulation in Object-Oriented Programming. In this article, I will d ...

最新文章

  1. django安装mysql_django+mysql安装和设置
  2. 再破纪录!ECCV 2020 旷视研究院15篇成果总览
  3. Windows环境下使用Mycat模拟分库分表-读写分离案例
  4. 使用Math 类 和 Random类 两种方式生成 20 到30之间的随机整数---java基础
  5. 干货| LeNet-5模型详解(附Python详细代码及注释)
  6. 开源 计划管理_公司开源计划的三大好处
  7. 深度学习入门之二阶段小demo练习(持续更新系列)
  8. Java基本数据类型字节长度
  9. BUUCTF [CISCN2019 总决赛 Day2 Web1] Easyweb
  10. 【计算机毕业设计】小型OA系统设计与实现Springboot
  11. webp格式怎么改png?如何将webp转换格式?
  12. matlab 质心,Matlab中三点确定质心
  13. java 微信公众号发红包_微信公众号如何给用户发红包?
  14. 内网渗透-内网穿透猕猴桃抓密码提权烂土豆提权
  15. 微信小程序——根据当前定位查询附近商家
  16. Java导出多个excel并压缩下载
  17. java email qq邮箱 与 阿里企业邮箱/个人邮箱
  18. 高数--函数--初等函数
  19. 5.4.7 延迟的心跳
  20. Linux设备模型——设备驱动模型和sysfs文件系统解读笔记

热门文章

  1. 运行php web文件路径,php的web路径获取
  2. 系统待办事项设计_B端产品工作台设计详解
  3. linux中求当前时间gettime,linux – 你如何在shell中获得clock_gettime(2)时钟?
  4. python接口封装_Python 接口测试之接口关键字封装
  5. 计算机组成原理中计算机主要包括哪几部分,计算机组成原理本科生期末试卷(五)部分答案详解...
  6. partition拼字符串_Python字符串partition(),rpartition()
  7. Java FileWriter示例
  8. python 成员运算符_Python的“ in”和“ not in”成员资格运算符
  9. ubuntu下安装英汉词典——stardict
  10. 开课吧:Java开发常用技术基础部分有哪些?