new 运算符

工厂函数

function factory() {
  let obj = {};
  obj.name = "小明";
  obj.age = function () {
    return 13;
  };
  return obj;
}

let t1 = factory();
let t2 = factory();

// 这其实说明了每一个创建出来的对象都有自己独有的空间,但是实际上公共函数模块没有必要复制多份
console.log(t1.age == t2.age); // false

New 运算符

new 运算符做了什么操作?

  1. 执行函数
  2. 创建一个空对象
  3. 函数里面的 this 指向这个空对象(或者说成是 this 指向实例化出来的对象)
  4. 隐式返还 this

new 在工厂函数中的运用

// 既然new 会自动创建一个空对象,那么我们没有必要自己再去创建一个对象了
/*
function factory() {
  let obj = {};
  obj.name = "小明";
  obj.age = function () {
    return 13;
  };
  return obj;
}

let t1 = factory();
*/

// 上述代码改写如下
function factory() {
  this.name = "小明";
  this.age = function () {
    return 13;
  };
}
let t1 = new factory();
  • 那么我们也可以说成是 构造函数 其实是简化后的工厂函数

针对构造函数的一些建议

  1. 构造函数首字母大写
  2. 属性放置在构造函数中
  3. 方法放置在原型上(这样就不需要每次生成对象都会去创建很多一摸一样的函数)
function Factory() {
  this.name = "小明";
}
Factory.prototype.age = function () {
  return 13;
};
let t1 = new Factory();
let t2 = new Factory();

console.log(t1.age == t2.age); //true

针对 constructor

  • constructor 不是构造函数,但是它指向构造函数

仿写简易 new 运算符

// 针对 new 运算符做的操作
function myNew(constructor, ...args) {
  let obj = {};
  obj.__proto__ = constructor.prototype;
  constructor.call(obj, ...args);
  return obj;
}

function Factory() {
  this.name = "小明";
  this.age = function () {
    console.log(13);
  };
}

let t1 = myNew(Factory);
console.log(t1.name); // 小明
console.log(t1.age()); // 13
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值