它们属于方法对象原型链顶端的 Function 的原型对象: 原型链中的__proto__ 上面我们说了 JS 中的类的
文章篇幅较长,常识点涵盖对照广泛,作为学习 JS 的一个总结。文章中仅涵盖 ES5 及之前的传统的常识点,未涵盖 ES6 及之后的新特性。
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而着名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且撑持面向东西、命令式和声明式(如函数式编程)气势派头。
主要内容有:值通报与引用通报、深拷贝与浅拷贝、弱类型界说语言的特性、JS的“类”、JS中的this、call/apply/bind要领、原型链中的__proto__、原型链中的prototype、原型链中constructor、原型链总结、JS面向东西、JS实现担任的几种方法
值通报与引用通报
JS 是弱类型语言,对比于强类型语言,其对函数式编程的撑持越发丰富。对付 JS 来说,数据类型也分为根基数据类型和引用数据类型,根基数据类型包孕:Number、String、Boolean、Null、 Undefined、Symbol(ES6),除上述六种类型外,其余类型均为引用类型,也就是我们所说的“类”。根基类型的传值为值通报,而引用类型的传值为引用通报,好比值通报的例子:
引用通报的例子:
深拷贝与浅拷贝
说到值通报与引用通报,就不得不再说一下深拷贝与浅拷贝。对付一个东西来说,拷贝等于复制该东西来创建一个与该东西一模一样的副本。东西的成员也有根基数据类型成员及引用数据类型成员,在拷贝时针对引用数据类型成员,如果是仅将引用拷贝了一份则为浅拷贝,否则为深拷贝,好比一个浅拷贝的例子:
可以看到,对付 r 中的 sons 只是拷贝了一份 p 中 sons 的引用, r 与 p 共用同一个 sons 东西,r 对其的改削也会影响到 p。很多情况下我们但愿 r 与 p 是完全独立的两个东西,那么对付 p 中的引用类型我们便需要也创建一份副本通报给 r 而不是仅仅给 r 通报一个引用。深拷贝我们可以使用递归实现:
深拷贝、浅拷贝代码如下:
<!--浅拷贝-->
function copy(p){
var result={};
for(i in p){
result[i]=p[i];
}
return result;
}
<!--深拷贝-->
function deepCopy(p,c){
if(p==null||p==undefined){return p;}
for(i in p){
if(typeof p[i]===‘object‘){
c[i]=(p[i].constructor===Array)?[]:{};
deepCopy(p[i],c[i]);
}else{
c[i]=p[i];
}
}
return c;
}
var p={
name:p,
sons:{
son1:‘1‘,
son2:‘2‘
}
}
var r=deepCopy(p,{});
r.name=‘r‘;
r.sons.son1=‘rSon1‘;
console.log(‘p.name :‘+p.name);
console.log(‘r.anme :‘+r.name);
console.log(‘p.son.son1 :‘+p.sons.son1);
console.log(‘r.son.son1 :‘+r.sons.son1);
JS 是一个弱类型界说语言,弱类型界说语言即为数据类型可以被忽略的语言。它与强类型界说语言相反, 一个变量可以赋差别数据类型的值。好比我们可以将字符串 ‘12‘ 和整数 3 进行连接得到字符串 ‘123‘,
然后可以把它当作整数 123,而不需要显示转换:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30560.html