创建对象常用的四种方式Ⅲ

构造函数模式

回顾一下上一篇说的工厂函数模式,它的好处是可以批量的生产对象。

系统内置类数组创建的方式

var arr = new Array();

差别
1.调用方式不同 一个一直调用 一个new调用
2.首字母大写

用new调用和函数执行调用的区别:

function Fn(){

}
var res1 = Fn(); //直接调用 返回值是undefined
var res2 = new Fn(); // 用new调用 返回的是当前类的实例
// 使用new调用的时候 Fn有了一个新的名字 => 类 .new Fn()的过程 叫做创建Fn的实例 默认返回当前类的实例的对象 =>this
console.log(res1,res2); //undefined,Fn

function Fn(){
  console.log(this); //Fn
}
console.log(res2); //Fn

构造函数

function Person(name,age){
  this.name = name; 
  this.age = age; 
  this.say = function(){ 
    console.log("my name is"+this.name+"my age is"+this.age);
 }
var p1 = new Person("Jack",9);
p1.say(); //my name is Jack my age is 9

需要注意
1.如果在构造函数模式中 new Fn()执行,如果Fn不需要传递参数的话,括号可以省略

function Fn(){
  this.say = function(){
    console.log("fn 执行");
  }
}
var f1 = new Fn(); // 如果不传参数 可以把()省略
f1.say();

2.this的指向问题,在类中出现的this.xxx = xxx中的this都是指向当前类的实例
3.什么是类?什么是实例?
把类理解成生产线,实例理解成产品

function Car(){ //Car这个类相当于汽车的生产线

}
var c1 = new Car(); // 这就是一个实例
var c2 = new Car();

4.在构造函数模式中,函数名叫做类名,类有普通函数的一面,当函数执行的时候,var num 其实只是当前形成的私有作用域和私有变量

function Fn(){
  var num = 10; // 普通的局部变量
  this.name = "Jack";
  this.say = function(){
    console.log("hello");
  }
}
var f1 = new Fn();
console.log(f1.num); // undefined

5.在构造函数中,浏览器会默认把我们的实例返回(this),是一个对象数据类型的。如果用户指定返回值
1)返回值是基本数据类型,那么用new调用时不理,仍然返回this。
2)如果返回引用数据类型,那么不再默认返回this,而是返回用户指定的数据。

function Fn(){
  return 123;
  return {"name":"jack"}; // 对象
  return function(){ // 函数
    console.log(123);
  }
}
var f1 = new Fn();
console.log(f1); //Fn()  用new调用没有返回123,仍然返回this(当前类的实例)  会返回对象和函数

function Fn(){
  return 123;
  return {"name":"jack"}; // 对象
  return function(){ // 函数
    console.log(123);
  }
}
var res = Fn();
console.log(res); //123  返回对象和函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,928评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 2,883评论 0 3
  • 光阴似箭,不知不觉这已经我作为一名老师的第七个年头,夫妻有七年之痒,那么作为一名老师是不是也有那么一个坎呢?我扪心...
    A步阅读 590评论 7 9