[JavaScript] 普通函数和构造函数的一些区别

技术分享 2019-03-07
[JavaScript] 普通函数和构造函数的一些区别

构造函数本质也是普通函数,但习惯首字母大写、必须用 new 调用。本文用代码示例对比二者在对象创建、instanceof 识别与 call 冒充上的差异。

构造函数也是一个普通函数,创建方式和普通函数一样,但习惯上首字母大写。

function objectone(text){  // 普通函数
  var test = new Object();
  test.t = 300;
  test.run = function(){
    return (this.t - text);
  }
  return test;
}

var Object1 = objectone(1); // 普通函数:直接调用
function Objecttwo(text){  // 构造函数,this 相当于后台自动 new Object
  this.t = 300;
  this.run = function(){
    return (this.t - text);
  }
  // 不需要 return,无需返回对象引用
}

var Object2 = new Objecttwo("1"); // 构造函数必须用 new 调用
// alert(Object1.run()); //299
// alert(Object2.run()); //299
// alert(Object1 instanceof objectone);  false // 不能识别对象
// alert(Object2 instanceof Objecttwo);  true  // 可识别对象引用来自 Objecttwo
// alert(Objecttwo("1")); // undefined,不可用普通函数方式调用

var Object3 = new Object();
Objecttwo.call(Object3, 2);  // 构造函数对象冒充
// alert(Object3.run()); //298