搜索
简帛阁>技术文章>深入理解javascript原型和闭包(7)——原型的灵活性

深入理解javascript原型和闭包(7)——原型的灵活性

Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼(中秋节刚过完)。压个啥样,就得是个啥样,不能随便动,动一动就坏了。

而在javascript中,就没有模子了,月饼被换成了面团,你可以捏成自己想要的样子。

 

首先,对象属性可以随时改动。

对象或者函数,刚开始new出来之后,可能啥属性都没有。但是你可以这会儿加一个,过一会儿在加两个,非常灵活。

在jQuery的源码中,对象被创建时什么属性都没有,都是代码一步一步执行时,一个一个加上的。

 

其次,如果继承的方法不合适,可以做出修改。

如上图,Object和Array的toString()方法不一样。肯定是Array.prototype.toString()方法做了修改。

同理,我也可以自定义一个函数,并自己去修改prototype.toString()方法。

 

最后,如果感觉当前缺少你要用的方法,可以自己去创建。

例如在json2.js源码中,为Date、String、Number、Boolean方法添加一个toJSON的属性。

如果你要添加内置方法的原型属性,最好做一步判断,如果该属性不存在,则添加。如果本来就存在,就没必要再添加了。

---------------------------------------------------------------------------

本文已更新到《深入理解javascript原型和闭包系列》的目录,更多内容可参见《深入理解javascript原型和闭包系列》。

另外,欢迎关注我的微博。

学习作者教程:《前端JS高级面试》《前端JS基础面试题》《React.js模拟大众点评webapp》《zepto设计与源码分析》《json2.js源码解读》

上文(理解javascript原型作用域系列(1一切都是对象已经提到,函数就是对象一种,因为通过instanceof函数可以判断。varfnfunction(){};consolelog(
前面提到上下文环境作用域知识,除了了解这些知识之外,还是理解基础。至于“”这个词概念文字描述,确实不好解释,我看过很多遍,但是现在还是记不住。但是你只需要知道应用两种情况即可
说明:该教程绕开了javascript一些基本语法知识,直接讲解javascript中最难理解两个部分,也是其他主流面向对象语言区别最大两个部分原型,当然,肯定少不了原型作用域
“一切都是对象”这句话重点在于如何去理解“对象”这个概念。当然,也不是所有的都是对象,值类型就不是对象。首先咱们还是先看看javascript中一个常用运算符typeof。typeof应该
续上一篇文章(http://wwwcnblogscom/wangfupeng1988/p/3986420html内容。上一篇我们讲到在全局环境下代码段中,执行上下文环境中有如何数据:变量、函数
在上一篇文章中,介绍了原型概念,了解到在javascript中构造函数、原型对象、实例三个好基友之间关系:每一个构造函数都有一个“守护神”原型对象,原型对象心里面也存着一个构造函数“位置”,
原型大家都知道,JavaScript不包含传统类继承模型,而是使用prototype原型模型。代码实现大概是这样子functionStudent(name){thisnamename;}varK
构造函数创建对象我们先使用构造函数创建一个对象:functionPerson(){}varperson=newPerson();personname='Kevin';consolelog(person
常用几种对象创建模式使用new关键字创建最基础对象创建方式,无非就是其他多数语言一样说的一样:没对象,你new一个呀!vargfnewObject();gfname"tangwei";gfba
参考资料,并强烈推荐:最详尽JS原型原型链终极详解,没有「可能是」知乎专栏:如何才能通俗易懂解释javascript里面’?原型:所有对象_proto_都指向其构造器prototyp