/*
  基于内置的 new 关键词,我们可以创建 Dog 的一个实例 zhangsan ,实例可以调用原型上的属性和方法
  需求:自己实现一个 _new 方法,也可以模拟出内置 new 后的结果
*/
/*
  let zhangsan = new Dog('张三');
   1、像普通函数执行一样,形成一个私有的作用域
     形参赋值
     变量提升
   2、默认创建一个对象,让函数中的 this 执行这个对象,这个对象就是当前类的一个实例
   3、代码执行
   4、默认把创建的对象返回
*/
function Dog(name) {
  this.name = name;
}
Dog.prototype.bark = function () {
  console.log('hello!');
}
Dog.prototype.sayName = function () {
  console.log('my name is ' + this.name);
}
// => Fn 当前要 new 的类 =>Dog
// => arg 后期需要给构造函数传递的参数信息 =>['张三']
 
function _new(Fn, ...arg) {
// => 创建一个空对象,让他的原型链指向 Fn.prototype (作为 Fn 的一个实例)
// => Object.create([AA对象]) -> 创建一个空对象 obj ,并且让空对象 obj 作为 AA对象 所属构造函数的实例(obj.__proto__=AA)
// let obj = {};
// obj.__proto__ = Fn.prototype;
  let obj = Object.create(Fn.prototype);
  Fn.call(obj, ...arg);
  return obj;
}
let zhangsan = _new(Dog, '张三');
zhangsan.bark();
zhangsan.sayName();
console.log(zhangsan instanceof Dog);

最新文章

  1. three.js全景
  2. Linux 进程间通讯详解五
  3. xbmc的静态链接办法
  4. 升级openssl
  5. OpenJudge计算概论-最长平台
  6. Android USB Host与HID通讯 (一)
  7. nginx 采用https 协议通信配置
  8. C语言学习之递归
  9. javascript 获取字符递增
  10. Java中的包装数据类型
  11. 51nod1347 旋转字符串
  12. DXT 图片压缩(DXTC/DirectX Texture Compression Overview)
  13. [转]MySQL导入.sql文件及常用命令
  14. Docker私有镜像仓库
  15. 数据库事务(Database Transaction)
  16. 理解数据结构Priority Queue
  17. Internet History, Technology and Security (Week 5-1)
  18. 使用Android Ant在编译时混淆
  19. Linux下hosts、host.conf、resolv.conf的区别
  20. 【Java面试题】54 去掉一个Vector集合中重复的元素

热门文章

  1. matlab基础知识总结
  2. 08_CSS入门和高级技巧(6)
  3. Leetcode_45. 跳跃游戏 II
  4. Selenium + Python + Chrome 自动化测试 环境搭建
  5. java经典问题 byte b=1、b=b+1、b+=1
  6. 「雕爷学编程」Arduino动手做(20)—水银开关模块
  7. react+express实现跨域
  8. promise对象里resolve和reject状态讲解及Promise.all()的使用
  9. [Asp.Net Core] Blazor WebAssembly - 工程向 - 如何在欢迎页面里, 预先加载wasm所需的文件
  10. php连接数据库 需要下载adodb