js的prototype是什么
发布时间:2025-05-20 22:51:57 发布人:远客网络
一、js的prototype是什么
1、 Javascript也是面向对象的语言,但它是一种基于原型Prototype的语言,而不是基于类的语言。
2、在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同方法是不一样的,所以我们用原型把构造函数中公共的属性和方法提取出来进行封装,达到让所有实例共享的目的。
3、function定义的对象有一个prototype属性,prototype属性又指向了一个prototype对象。在prototype对象中有一个constructor属性,这个constructor属性同样指向一个constructor对象,而这个constructor对象恰恰就是这个function函数本身。
4、 constructor:constructor== function
5、js中创建一个函数,就会自动创建一个prototype属性,这个属性指向函数的原型对象,并且原型对象会自动获得一个constructor(构造函数)属性,指向该函数。
6、举例:以前面的原型模式创建对象为例说明
7、<script type="text/javascript">
8、Person.prototype.job="Software Engineer";
9、Person.prototype.sayName=function(){
10、 alert(lxy.sayName()==personA.sayName());//true
11、</script>实例与原型的关系
12、通过构造函数创建一个实例,该实例内部将包含一个属性(指针),指向构造函数的原型对象。
13、举例:Person构造函数的实例Person1和Person2的[[Prototype]]属性都指向Person的原型。
14、Note:[[Prototype]]连接是存在于实例和构造函数的原型之间,而不是存在实例与构造函数之间。
15、关于这个指针,ECMA-262中叫[[Prototype]],没有标准的方式访问[[Prototype]],但Firefox、Safari和Chrome在每个对象上都支持一个属性__protp__,而在其他实现中,这个属性对脚本不可见。
二、javascript和node.js,先学哪个
1、 javascript和node.js,先学哪个?
javascript。
2、你要了解 js一些最基础的东西才能编写node.js
3、简单的说 Node.js就是运行在服务端的 JavaScript。Node.js是一个基于Chrome JavaScript运行时建立的一个平台。你应该了解一些基本的计算机编程术语。如果你学习过Javascript,PHP,Java等编程语言,将有助于你更快的了解Node.js编程。去慕课网找视频课程
4、 1使用JavaScript运行于服务端的平台上,自然继承了JavaScript语言的一些特性;
5、 2Node.js基于单线程、基于非阻塞I/O模型实现;
6、 3适合于数据密集型应用,不适用于计算密集型类的应用(如算法等);
7、 4通过使用回调函数,来避免同步地等待I/O操作完成;
8、 5Node.js非核心模块非常多,质量可能参差不齐(使用别人贡献的模块,要有承担风险的准备);
9、 6因为简单,开发Node.js应用程序效率很高;
10、 7调试相对困难,调试工具可能没有其他一些比较成熟的语言(如Java、C++等)的好用;
11、 8Node.js基于事件驱动架构,events模块是Node.js最核心的模块。
12、 node.js与java都是服务器语言,但是两者存在很大区别:
13、(1)Node.js比Java更快:node.js开发快,运行的效率也算比较高,但是如果项目大了就容易乱,而且javascript不是静态类型的语言,要到运行时才知道类型错误,所以写的多了之后免不了会出现光知道有错但是找不到哪儿错的情况,所以测试就得些的更好更详细。
14、 java开发慢,但是如果项目大、复杂的话,用java就不容易乱,管理起来比node.js省。
15、(2)Node.js前后端都采用Javascript,代表未来发展的趋势,而java则是现在的最流行的服务器端编程语言。
16、(3)Node.js和Java EE——一种是解释语言,一种是编译语言.
17、哪个更重要?看自己与项目的需求、时间的紧迫性再决定先用哪个。如果急用,jQuery提供简便、继承的操作与易用性、丰富的文档,可以节省了不少开发时间。
18、另外,题主先需要知道什么是 javascript?什么是 jQuery?一切问题就解决了。
19、 JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。
20、 jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
21、肯定是先学习javascript,因为javascript是一门语言,而jquery是这门编程语言的函数库,一个可以对javascript开发省事的函数库,但是使用这个库之前,你得先熟悉javascript的语法,才能学会jquery。
22、 js是基础,jquery是在js基础上产生的框架。
23、所以js应该先去学习。但jquery也是很强大的,在学完js后也应该去涉猎一下。他对很多原生的js进行了一定的封装。
24、如果一定要并行学习的话也是可以的,基础的东西并不会很难理解。
25、 javascript就是js。。。。先学js再学jquery,jquery是javascript的一个框架,是附属于js的。
三、为什么不要直接在Object.prototype上定义方法
当项目只有你一个人时,你想怎么改就怎么改,因为你很清楚他们。
当你的项目不止一个人时,就很容易出现冲突,并且你会为了解决这个冲突而花费更多的时间。
个真实的例子:js红皮书的作者在雅虎工作时,因为同事更改了一个YAHOO.util.Event.stopEvent()方法,结果导致他花了几天的
时间去解决这个问题,当好不容易解决了,更多的bug出现了,因为还有很多地方也都依赖于这个方法。所以他说了一句话:Don’t modify
不单单是上面的问题,你可能会更关心你的项目是否可以在将来使用。
John Resig- getElementsByClassName pre Prototype 1.6关于prorotype的getElementsByClassName的故事可以看这里。
概意思就是说Prototype写了一个很好的方法,后来大家都觉得好,所以JS在原生的方法上也加了这个。但是不幸的是,prototype返回的是
Array,JS返回的是NodeList。那在原生方法没出现之前这句代码
document.getElementsByClassName('myclass').each(doSomething)可以好好的执行,但是原生
方法出来后,NodeList并没有each方法…所以prototype就悲剧了…
3、如果所有人都改呢?这个问题的严重性应该不用说了…
所以用Nicholas C.Zakas的一句话做总结:Don’t modify objects you don’t own。