JS概念理解(一)——函数和对象、原型链、_proto_
来源:互联网 发布:淘宝店铺上架宝贝数量 编辑:程序博客网 时间:2024/06/05 16:52
最近发现自己JS的基础不太好,于是通过看书和大神的博客,通过自己的理解将一些难懂的概念在此总结:
1.函数和对象的关系:
在JavaScript中一切对象都是通过函数创建的,某些情况下的写法实际上是一种语法糖:
var a = {b : 20, c: 30};var arr = [ 5 , "as", true];//可以写成var a = new Object();a.b = 20;a.c = 30;var arr = new Array();arr[0] = 5;arr[1] = "as";arr[2] = true;上面这两种写法实际上可以互相替换,我们经常使用的上面这种写法,因为更加简便,可读性更高,但是我们需要明白它们实际上也是通过函数创建的。
2.Prototype原型链:
在Java这类强类型语言当中,类在被创建好之后不允许再次添加其中的方法和属性,就像是盖印章,盖下去是什么就没法改变了。而在JavaScript中,由于它是弱类型语言,可以随时在程序中改变类中的方法和属性。
var aa = {a:10 , b:true};console.log(aa.toString()); //结果:[object Object]var bb = [ 10,20];console.log(bb.toString()); //结果:10,20从上面的代码段可以看出来,由于它们的对象类型不同,结果也大不一样,是Array对象对Array.prototype.toString()进行了重载。
如果我们想实现重载,也很简单只需要在继承的子类的prototype中修改父类的方法就可以了,因为原型链是一个链式结构,当子类需要一个方法时他总是会先去找自己的类中有没有该方法,如果没有在去父类中寻找。
function People() { this.name = "srk"; this.age = 100;}People.prototype.speak = function () { console.log("hello person");};function Student() {}Student.prototype = new People(); //实现继承Student.prototype.speak = function () { console.log("hello student");};var p1 = new People();var p2 = new Student();p1.speak();//hello personp2.speak(); //hello student最后再放一幅图,很能说明JS原型链继承的特点:
3._proto_隐式原型
每个对象都拥有一个隐藏属性_proto_,该属性引用了创建这个对象的函数的prototype,还用上个例子的代码来说的话,p1._proto_ === People.prototype,关系如图所示:
在这个图当中,o1的_proto_指向了Object.prototype,因为它实际上就是一个Object对象,然而Object.prototype也拥有一个_proto_属性,这个值为null。总而言之就是:对象的_proto_指向创建它的函数的prototype。
阅读全文
0 0
- JS概念理解(一)——函数和对象、原型链、_proto_
- JS中原型链中的prototype与_proto_的理解和区别
- 深入理解JS—对象和原型
- js 原型_proto_和prototype图解
- Js中原型与原型链及_proto_和prototype的关系
- JavaScript中原型学习基本理解(原型链: prototype _proto_)(二)
- JS的prototype和_proto_的理解
- JS中三种主要方法(函数定义)类别理解 —(JS面向对象&原型)
- js的原型链和对象理解
- 对JS原型(链)的理解和记忆(一)
- JS原型链中 _proto_和prototype及constructor的关系
- js关于原型构造函数和原型链的理解
- 【web前端-理解js原型】理解Javascript中的原型对象、原型链和继承
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 【Linux】Linux下c++使用Json库
- android_音乐播放器
- C++之在资源管理类中提供对原始资源的访问(15)---《Effective C++》
- Tomcat学习总结(6)—— Tomcat集群配置
- gym 101170 NWERC 2016 H Hamiltonian Hypercube
- JS概念理解(一)——函数和对象、原型链、_proto_
- Openstack4J API初体验之浮动IP的查询,关联和删除
- HDOJ 1443 joseph (找规律)
- Android Studio解决unspecified on project app resolves to an APK archive which is not supported
- 反转链表
- Java基础知识总结(绝对经典)
- SpringMVC中跳转路径的问题
- 【工具】【idea】无法识别java文件(can't Resolve)
- ntp服务安装配置