// 只要函数创建,就有一个prototype属性
// 构造函数和普通函数的区别就是调用的时候又没有用 new
function Fn() {
  // this 就是实例化后的对象 三段式
var this = {
__proto__: Fn.prototype
};
this.XXX = XXX;
return this;
}
// 原型
Fn.prototype = {
  // 浏览器自带
  constructor: Fn()  // 构造函数
__proto__:Object
}; 
obj->Fn.prototype->Object.prototype->null

  

//new运算符的伪码实现
function _new(clazz, args){
//clone(clazz.prototype)
var this = {};
this.__proto__ = clazz.prototype;
var obj = clazz.apply(this, args);
var type = typeof obj;
if(type == "object" && obj !== null || type == "function"){
return obj;
}else{
return this;
}
/* 另一种写法
if(obj === null || type == "undefined" || type == "boolean" || type == "number" || type == "string"){
return this;
}else{
return obj;
}
*/
}
var a = new ClassA(1,2);
var a = _new(ClassA, [1,2]); //伪码    来源:https://wmingjian.iteye.com/blog/1881658

  create read update delete

  create select update delete

  

new运算符工作原理(new运算符的伪码实现)的更多相关文章

  1. Java按位取反运算符“~”的工作原理

    说明:本文参考了文章<Java按位取反运算符“~”>,链接:https://blog.csdn.net/smilecall/article/details/4245447 补充:位运算符( ...

  2. [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)

    原文地址CodeProject 目录 介绍 “二进制-十进制”相互转换 十进制->二进制 二进制->十进制 OR运算符(按位或|) OR运算符工作方式 FlagsAttribute AND ...

  3. JS原型链(二)--new运算符的原理

    new运算符的原理: 第一步:创建一个空对象,该对象继承构造函数的原型对象 第二步:执行这个构造函数,并且把this指向该空对象 第三步:返回:如果构造函数执行后返回的结果是一个object类型,则返 ...

  4. new 运算符的原理

    关于 new 运算符的原理: 1.红宝书上解释: (1)创建一个新对象 (2)将构造函数的作用域赋给新对象 (3)执行构造函数中的代码 (4)返回新对象 2.MDN上的解释: (1)一个继承自 Foo ...

  5. 虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte

    #include <iostream> using namespace std; class A { public: A(){} virtual void geta(){ cout < ...

  6. C语言杂谈(二)自增运算符++与间接访问运算符*的结合关系和应用模式

    自增运算符++有前缀和后缀两种,在搭配间接访问运算符*时,因为顺序.括号和结合关系的影响,很容易让人产生误解,产生错误的结果,这篇文章来详细分析一下这几种运算符的不同搭配情况. ++.--和*的优先级 ...

  7. Ajax的工作原理以及优点、缺点 (汇总)

    最近空闲时间,有朋友问我关于Ajax的工作原理,在这里我结合自己的工作经验和网上大佬的经验做一个总结,如有不足,请各位业内大佬指正 在我们了解Ajax之前,我们先来了解一下Javascript的执行原 ...

  8. C++虚函数工作原理

    一.虚函数的工作原理      虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数.典型情况下,这一信息具有一种被称为 vptr(virtual table poi ...

  9. JavaScript原型继承工作原理

    原型继承的定义 当你阅读关于JS原型继承的解释时,你时常会看到以下这段文字: 当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止.——出自JavaScript秘 ...

随机推荐

  1. javascript:void()的理解

    href="javascript:void(0);"本身没有任何危害啊,表示这是一个空链接.如果想在网页上用a标签,但又不想产生页面实际跳转动作,就可以这么做.下面是一些用法对比: ...

  2. php如何获取服务器端的一些信息

    <?php echo "服务器端的IP地址是:<br />"; echo $_SERVER['SERVER_ADDR']; echo "服务器端的端口号 ...

  3. 在BUG分支下创建分支,开发后合并到bus分支

    在BUG分支下创建分支 1.切换到bus分支 2,创建新分支 git checkout -b bugfix/fix_vedio_0627 3,把创建的分支push到远程分支 git push orig ...

  4. fpm rpm制作

    使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...

  5. do_mmap解读

    1: unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, 2: unsigned long len, unsigned ...

  6. tfsenflow队列|tf.train.slice_input_producer|tf.train.Coordinator|tf.train.start_queue_runners

      #### ''' tf.train.slice_input_producer :定义样本放入文件名队列的方式[迭代次数,是否乱序],但此时文件名队列还没有真正写入数据 slice_input_pr ...

  7. grep与egrep命令

    greo -E 等同于 egrep grep常用两种方式 1.   grep -c python a.txt 2.   cat a.txt | grep -c python a.txt文件如下 i l ...

  8. Spark Streaming + Kafka 整合向导之createDirectStream

    启动zk: zkServer.sh start 启动kafka:kafka-server-start.sh $KAFKA_HOME/config/server.properties 创建一个topic ...

  9. SQL查询连续年份

    有这样一个问题,给出一个表格记录了夺冠球队的名称和年份,我们要做的就是写出一条SQL语句,查询再次期间连续夺冠的有哪些,起止时间是什么 下边是代码 create table #t(TEAM vaarc ...

  10. 前端学习(二十三)DOM操作,事件(笔记)

    javascript 组成部分    1.ECMAScript        javascript的核心解释器 2.DOM        Document Object Modle         文 ...