new运算符工作原理(new运算符的伪码实现)
// 只要函数创建,就有一个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运算符的伪码实现)的更多相关文章
- Java按位取反运算符“~”的工作原理
说明:本文参考了文章<Java按位取反运算符“~”>,链接:https://blog.csdn.net/smilecall/article/details/4245447 补充:位运算符( ...
- [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)
原文地址CodeProject 目录 介绍 “二进制-十进制”相互转换 十进制->二进制 二进制->十进制 OR运算符(按位或|) OR运算符工作方式 FlagsAttribute AND ...
- JS原型链(二)--new运算符的原理
new运算符的原理: 第一步:创建一个空对象,该对象继承构造函数的原型对象 第二步:执行这个构造函数,并且把this指向该空对象 第三步:返回:如果构造函数执行后返回的结果是一个object类型,则返 ...
- new 运算符的原理
关于 new 运算符的原理: 1.红宝书上解释: (1)创建一个新对象 (2)将构造函数的作用域赋给新对象 (3)执行构造函数中的代码 (4)返回新对象 2.MDN上的解释: (1)一个继承自 Foo ...
- 虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte
#include <iostream> using namespace std; class A { public: A(){} virtual void geta(){ cout < ...
- C语言杂谈(二)自增运算符++与间接访问运算符*的结合关系和应用模式
自增运算符++有前缀和后缀两种,在搭配间接访问运算符*时,因为顺序.括号和结合关系的影响,很容易让人产生误解,产生错误的结果,这篇文章来详细分析一下这几种运算符的不同搭配情况. ++.--和*的优先级 ...
- Ajax的工作原理以及优点、缺点 (汇总)
最近空闲时间,有朋友问我关于Ajax的工作原理,在这里我结合自己的工作经验和网上大佬的经验做一个总结,如有不足,请各位业内大佬指正 在我们了解Ajax之前,我们先来了解一下Javascript的执行原 ...
- C++虚函数工作原理
一.虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数.典型情况下,这一信息具有一种被称为 vptr(virtual table poi ...
- JavaScript原型继承工作原理
原型继承的定义 当你阅读关于JS原型继承的解释时,你时常会看到以下这段文字: 当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止.——出自JavaScript秘 ...
随机推荐
- Django-自定义用户模型
Django最方便的一点,是自带用户系统,但有些情况下,不符合项目需求, 原因1.我们有时候需要自定义一些字段,或者删除Django自带字段,2.我们有时候需要定义哪些字段是必填的,登陆时的用户名是哪 ...
- SeaJs与RequireJs执行差异
seajs与requirejs在模块的加载方面是没有差异的,无论是requirejs在定义模块时定义的依赖模块,还是seajs在factory函数中require的依赖模块,在会在加载当前模块时被载入 ...
- C# 几进制 转换到几进制
public string ConvertString(string value, int fromBase, int toBase) { int intValue = Convert.ToInt32 ...
- JS原型与原型链终极详解 (转载)
这篇文章需要认认真真仔仔细细的看才能看懂 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函 ...
- 转 cpu高 问题分析定位
文章来源: http://www.blogjava.net/hankchen/archive/2012/08/09/377735.html 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原 ...
- [LeetCode] 627.交换性别
给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值.交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然). 要求只使用一个更新(Update)语句,并且没 ...
- Flink从socket读取数据sink到redis
package com.lin.flink.stream.customPartition; import org.apache.flink.api.common.functions.MapFuncti ...
- go中变量的使用
// 变量的使用 package main import "fmt" // 定义多个全局变量 var ( globalName = "Jackie" globa ...
- dictionary小项目代码管理
软件项目开发流程 需求分析 ----> 概要设计 ---> 项目计划 ---->详细设计--->编码测试 -----> 项目测试 ---->调试修改 ---> ...
- ActiveMQ安装步骤及介绍
1.什么是ActiveMQ? ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现. JMS相关概念 提供者:实现JMS规范的消息中间件服务器 客户端:发送或接 ...