js的prototype是什么


本文摘自PHP中文网,作者(*-*)浩,侵删。

Javascript也是面向对象的语言,但它是一种基于原型Prototype的语言,而不是基于类的语言。

在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同方法是不一样的,所以我们用原型把构造函数中公共的属性和方法提取出来进行封装,达到让所有实例共享的目的。

function定义的对象有一个prototype属性,prototype属性又指向了一个prototype对象。在prototype对象中有一个constructor属性,这个constructor属性同样指向一个constructor对象,而这个constructor对象恰恰就是这个function函数本身。

用伪代码表示如下:

1

2

3

4

5

var function{

    prototype:prototype{

        constructor:constructor == function

    }

}

函数与原型的关系

js中创建一个函数,就会自动创建一个prototype属性,这个属性指向函数的原型对象,并且原型对象会自动获得一个constructor(构造函数)属性,指向该函数。

举例:以前面的原型模式创建对象为例说明

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<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是什么的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

如何实现javascript延时加载

js实现统计字符出现的次数并去重的方法

鲜为人知的 json.stringify 用法

js实现图片无缝滚动

js实现正则表达式验证端口范围的方法

怎么引入jquery?

javascript怎么读取map的值

js不让电脑端浏览器缩放网页

javascrip注释符是什么

js是什么

更多相关阅读请进入《js》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...