javascript原型,原型链 有什么特点

JavaScript016

javascript原型,原型链 有什么特点,第1张

javascript原型,原型链特点:原型链实现了继承。

JS中每个函数都存在有一个原型对象属性prototype。并且所有函数的默认原型都是Object的实例。每个继承父函数的子函数的对象都包含一个内部属性proto。该属性包含一个指针,指向父函数的prototype。若父函数的原型对象的_proto_属性为再上一层函数。在此过程中就形成了原型链。

原型链的作用是用来实现继承,比如我们新建一个数组,数组的方法就是从数组的原型上继承而来的。

var arr = []

arr.map === Array.prototype.map //arr.map

是从arr.__proto__上继承下来的,arr.__proto__也就是Array.prototype。

扩展资料:

1.JS中每个函数都存在有一个原型对象属性prototype。并且所有函数的默认原型都是Object的实例。

2.每个继承父函数的子函数的对象都包含一个内部属性_proto_。该属性包含一个指针,指向父函数的prototype。若父函数的原型对象的_proto_属性为再上一层函数。在此过程中就形成了原型链。

3.原型链实现了继承。原型链存在两个问题:a 包含引用类型值的原型属性会被所有实例共享。b 在创建子类型时,无法向超类型的构造函数中传递参数。

参考资料:百度百科-javascript

      ① 我们所创建的每一个函数,解析器都会向函数中添加一个prototype,这个属性对应着一个对象,这个对象就是原型对象

    ②如果函数作为普通的函数调用时,prototype没有任何作用

    ③当函数以构造函数形式调用时,它所创建的对象中都会有隐含的属性,指向该构造函数的原型对象,我们可以用__proto__来访问该属性。

    ④原型对象就相当于公共的区域,所有同一个类的实例都可以到这个原型对象,我们可以将对象中共有的内容统一设置到原型对象中

   

    ⑤当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有没有则会去原型对象中寻找,如果找到则直接使用,直到找Object,Object的原型没有原型,如果最后没有找到,则返回undefind

    ①当我们直接在页面中打印一个对象时,实际是输出对象的toString()方法的返回值,可以自行更改toString()方法的返回值,

在JavaScript中,prototype对象是实现面向对象的一个重要机制。每个函数就是一个对象(Function),函数对象都有一个子对象prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。

1、该对象被类所引用,只有函数对象才可引用;

2、在new实例化后,其成员被实例化,实例对象方可调用。

同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。