当前位置:首页 > Web开发 > 正文

它们属于方法对象原型链顶端的 Function 的原型对象: 原型链中的__proto__ 上面我们说了 JS 中的类的

2024-03-31 Web开发

技术图片

  文章篇幅较长,常识点涵盖对照广泛,作为学习 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