-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JavaScript体系结构 #3
Comments
看懂源码必备知识点
|
跟着yayu学习JavaScript实用算法
|
手写原生方法模拟实现一个new的效果模拟new的效果要注意:
function create(){
var obj=new Object();
var constructor=[].shift.call(arguments);//获取构造函数
obj.__proto__=constructor.prototype;
var res=constructor.**apply**(obj, arguments);//将构造函数的属性挂在obj上
return res instanceof Object?res:obj;
}
模拟实现一个 bind 的效果实现一个 call/apply 函数手写Promise手写XMLHttpRequest
使用示例 var xhr=new XMLHttpRequest();
xhr.open("post","http://example.com/post", true);//false表示异步请求
xhr.onreadystatechange=function(){
if(xhr.readystate === 4){
if(xhr.status>=200 && xhr<300){
alert(xhr.responseText);
}
}
}
var data={ name:"moya", age:13};
//模拟POST表单提交
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(transform(data)));//参数不能为空 |
类型
值类型 vs. 引用类型
考点
1. 区别
2. 类型判断
3. 深浅拷贝
深浅拷贝的概念是相对于引用类型存在的。
数组的浅拷贝方法:
对象的浅拷贝方法
深拷贝方法:
深拷贝可能会碰到的坑
这种方式可以满足大多数场景的需求
粗糙版
上面这种方法的缺陷可见这篇文章的分析
精致版(精致版除了没有解决Symbol属性的问题,其他近乎完美
隐式类型转换
JS有6种值类型,
null
,undefined
,symbol
比较特殊,“正常”的也就3种number
,string
,boolean
,而类型转换的目标也就这三种类型。注意:
number
类型有1种特殊值NaN
隐式类型转换的3个场景分别对应3种转换目标
boolean
,number
,string
:if/!
等逻辑判断==
,算术以及关系运算)2种源类型:值类型和对象类型。
值类型的转换都有固定的规则,比较简单只列举特殊的几个:
转换为数字时:
对象类型的转换规则
所有的对象转换为布尔型都为
true
,所以需要讨论的情况是目标为number
以及string
。根据场景的不同,对象类型转换时所谓的
hint
也不同hint='string'
时,方法不存在或者返回值不为原始类型时,依次调用对象的以下方法:hint='number'和hint='default'
注:
+
,关系运算时,无法确定转换为string还是number时,规则和number一样,不需要特殊记忆特殊的数学运算:关系和+
关系运算可以通过以小(弱等)见大(若不等, >, <等)的方法推导
弱等(==)
string
或number
, 若运算数两者都有,则会将一方转换为数字类型+
+
会作为字符串拼接符原型和原型链
关于原型你需要知道的
__proto__
属性,属性值为一个普通对象,即其'原型'对象prototype
属性,属性值仍然是一个普通对象__proto__
指向对象Function.prototype
__proto__
对象指向其构造函数的prototype对象所谓原型链即访问某属性和方法时,从对象本身查找,如没找到则沿着
__proto__
逐层查找,直到找到终点Object.prototype(Object.prototype.proto=null)。继承
继承的核心就是将子类构造函数的原型对象设为父类的实例。
注意事项:
示例
测试用例
作用域和作用域链
概念:自由变量,闭包
考点
异步
The text was updated successfully, but these errors were encountered: