js的prototype是什么
程序员文章站
2022-04-17 15:01:23
...
Javascript也是面向对象的语言,但它是一种基于原型Prototype的语言,而不是基于类的语言。
在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同方法是不一样的,所以我们用原型把构造函数中公共的属性和方法提取出来进行封装,达到让所有实例共享的目的。
function定义的对象有一个prototype属性,prototype属性又指向了一个prototype对象。在prototype对象中有一个constructor属性,这个constructor属性同样指向一个constructor对象,而这个constructor对象恰恰就是这个function函数本身。
用伪代码表示如下:
var function{ prototype:prototype{ constructor:constructor == function } }
函数与原型的关系
js中创建一个函数,就会自动创建一个prototype属性,这个属性指向函数的原型对象,并且原型对象会自动获得一个constructor(构造函数)属性,指向该函数。
举例:以前面的原型模式创建对象为例说明
<script type="text/javascript"> function Person(){ } Person.prototype.name="lxy"; Person.prototype.age=22; Person.prototype.job="Software Engineer"; Person.prototype.sayName=function(){ alert(this.name); } var lxy=new Person(); lxy.sayName(); var personA=new Person(); personA.sayName(); alert(lxy.sayName()==personA.sayName());//true </script>
实例与原型的关系
通过构造函数创建一个实例,该实例内部将包含一个属性(指针),指向构造函数的原型对象。
举例:Person构造函数的实例Person1和Person2的[[Prototype]]属性都指向Person的原型。
Note:[[Prototype]]连接是存在于实例和构造函数的原型之间,而不是存在实例与构造函数之间。
关于这个指针,ECMA-262中叫[[Prototype]],没有标准的方式访问[[Prototype]],但Firefox、Safari和Chrome在每个对象上都支持一个属性__protp__,而在其他实现中,这个属性对脚本不可见。
以上就是js的prototype是什么的详细内容,更多请关注其它相关文章!
推荐阅读
-
PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么? - 红藕香残
-
Json字符串转换为JS对象的高效方法实例_javascript技巧
-
PHP 和 Node.js 的10项对比挑战
-
hiberfil.sys是什么文件 PHP中文件读、写、删的操作PHP中对文件和目录操作
-
javascript - js设置的cookie php可以读吧?反过来亦然
-
jquery/js/php的问题?
-
Node.js中关于多进程模块Cluster的详细介绍以及如何使用
-
用prototype实现的简单小巧的多级联动菜单
-
php文档的这句话,是什么意思?
-
Java多态成员访问的特点是什么?