理解 JavaScript 面向对象(一)

来源:互联网 发布:小莫零食淘宝店 编辑:程序博客网 时间:2024/04/28 20:36

提起 javascript 相信好多朋友都是对它有爱有恨。爱它的强大和灵活,有时候又掉进了许多坑。不论是做B/S结构应用开发还是专业的前端开发人员,相信大家对JavaScript都不陌生,随着近几年移动互联网的井喷式发展,H5 和JS 也是异常火爆,各种优秀的 JavaScript 框架层出不穷,一些人也是习惯了使用这些框架快速进行Web开发,从而或多或少的忽略了对原生JavaScript 的学习和深入理解。今天就和大家一起来分享一下我对js中面向对象的理解,希望大家也分享一下自己与JS的分不清理还乱的情感故事(^_^),让我们共同进步吧~

其实,面向对象是一个概念或者编程思想,它不应该依赖于某个语言存在,所以,面向对象的 一些优势我们这里就不讨论了。

JavaScript 是通过一种叫做 原型(prototype)的方式来实现面向对象的。在ECMA-Script中,对象被定义为:“无序属性的集合,其属性值可以是基本值,对象或者是函数”。我的理解:对象其实无非就是“键-值”的集合,可以类比Java中的Map。可以简单理解为JS的对象是一组无序的值,其中的属性或方法都有一个名字,根据这个名字可以访问相映射的值。

有些朋友可能会说,不对啊,不是还有函数吗?因为,函数实际上也是对象。每个函数都是Function类型的 实例,而且与其他引用类型一样,具有属性和方法。而且函数名也仅仅是指向函数对象的指针而已,它不会与函数绑定。我们一起来看一个例子:

理解 JavaScript 面向对象(一)上面是声明了一个变量,然后初始化为一个函数,注意末尾的分号,这和声明其他变量没有任何区别,从技术上讲,这只是一个函数表达式。但是,这种语法会帮助我们理解函数是对象,而函数名是指向这个对象的指针。理解了这一点,函数名和其他指向了对象的变量就没有任何差别。我们再看一个例子:

理解 JavaScript 面向对象(一)我们定义了一个函数,然后又将其赋值给另外一个变量,此时两个变量都指向了同一个对象。即当执行完成var add = sum;这行以后,内存结构如图:

理解 JavaScript 面向对象(一)当执行完成 sum = null;这行过后,只是将sum变量的值赋值为空,而函数对象依然存在。此时的内存机构如图:

理解 JavaScript 面向对象(一)此时,通过变量add仍然可以调用函数,得到正确的结果:

理解 JavaScript 面向对象(一)所以,通过上面的例子,我们可以认识到,函数名就是指向函数对象的指针,函数就是对象。所以,js中任何对象都是一组无序的”键-值“对,”键“即属性,”值“即基本数值或对象。

0 0
原创粉丝点击