原型

作者: 海子小夜曲 | 来源:发表于2018-12-11 19:35 被阅读0次

原型的作用

1,作用是:实现了同类对象之间的数据共享

2,最终实现继承,也就是实现了代码的复用

原型的基本概念

1,概念:函数对象的prototype属性,所引用的对象。

2,原型的本质就是对象。  一般函数都有prototype属性。也就是一般函数都有原型

3,声明一个函数时,原型随之产生。此时原型默认是一个空对象。但是具有一个默认属性。constructor,该属性指向其构造函数。

4,在原型上的成员(属性和方法),都可以被其实例访问。

获取原型的方式

1,通过函数: <fn>.prototype

2,通过对象:<object>.__proto__

3,非标准属性:以两个下划线开头和结尾的属性都是非标准的属性。在这里除了__proto__属性外,其他都不介绍。因为有它的存在,才有了原型链

原型的特性

1,共享性(继承性)

原型上的成员都可以被其实例直接访问。

2,不可变性

实例不可以直接修改原性上的任何成员

3,动态性

*如果在原有的原型上扩展成员,会直接反映到已创建的对象和之后创建的对象上

*如果替换了原有的原型,此时新原型的成员在之前已创建的对象是不能访问到的。在之后创建的对象是可以访问到的。

*如果置换了原形,就会在新的原型上丢失默认的constructor属性。如果想让其有该属性,就需要手动添加。

4,唯一性

所有的实例只能共享一个原型。

原型的称呼

1,原型属性:站在函数的角度,由于函数具有prototype属性,引用其原型,所以可以将其称之为原型属性

2,原型对象:站在对象或者原型本质上的角度。由于一般对象都有原型,所以可以称原型为该对象的原型对象

prototype属性和__proto__ 的联系与区别

1,prototype属性是函数所拥有的,可以获取到其原型

2__proto__属性是对象所拥有的,也可以获取到其原型。

3,两个属性都可以获取到原型。

5,构造函数执行的过程

1,创建一个空对象obj;

2,将上面创建的空对象obj赋值给this;

3,执行构造函数内部的代码块

4,隐式返回,即return this。

5,如果在构造函数中有显示的return语句,此时并不是所有的返回值类型都能够被返回

*如果返回值的类型是基本数据类型,在构造函数执行模式下,会被忽略。

*复合数据类型不会被忽略掉

继承

对象与对象之间的关系

1,概念:

继承就是指 一个对象a有权去访问另外一个对象b上的成员。此时就称,a对象继承自b对象

2,实现方式:

只要是一个对象能访问到另一个对象上的成员,这种方式就是继承方式。

继承的实现方式

1,原型式

* 扩展原型:如果想让某类对象具有一些方法或属性,就可以扩展其原型。这样这些对象就可以直接访问扩展的成员了

* 置换原型:通过替换原型 让实例继承自新的对象

2,混入式

将对象b上的成员拷贝一份添加到对象a上

hasOwnProperty方法

<对象>.hasOwnProperty('propertyName')

用来判断指定的属性是否为该对象自己拥有的,而不是继承下来的。

extend 方法

1,语法:extend([target,arg1,arg2,...]);

2,功能:给指定的对象实现混入式继承。

3,实现思路

*判断是否传入实参,如果没有传入实参,提前结束函数运行。

*如果只传入一个实参。将该传入的实参,作为extend方法的返回值

*否则,声明一个target变量,赋值为arguments  第一个元素

*从索引1 开始遍历arguments对象

*枚举遍历到的当前对象所有属性

*将当前属性扩展到target上

*将target作为extend方法的返回值

经典继承

1,ES5提供的方法Object.create();

2,语法: var o = Object.create(obj);

3,功能:制定一个要继承的对象,该方法会返回一个新对象。并继承自传入的新对象。

兼容性封装

if(!Object.create){

Object.create=function(obj){

function F(){

}

F.prototype=obj;

return new F();

}

}

对象

1,概念:无序的键值对集合;对象就是对现实世界中的某一类事物的抽象

2,创建方式

*字面量(直接量) var obj ={};

*通过构造函数 var obj=new Object();

*工厂模式:自己本身可能不具备创建该对象的能力,但是该函数会通过其他构造函数或字面量的形式创建一个对象。再将该对象返回即可。

#封装创建对象的过程,不需要用户关心怎么创建对象,只需要调用该方法得到对象即可。

#相对于构造函数模式,工厂模式有new和没new都能创建一个对象

#用途:在插件或框架开发时,经常使用工厂模式创建对象

面向对象(思想)自己不想干事,叫别人去干

1,定义:在实际开发的时候,要完成某个功能首先要考虑是否已有某个对象可以完成该功能。如果有,直接使用该对象帮助完成功能。如果没有,要考虑该功能是否要实现复用,如果是,此时最好的实现方式为创建一个对象,让改对象实现功能。

面向对象三大特性

1,封装性 private public protected

2,继承性:传统面向语言是指 类(class)与“类”之间的关系,二js中是指对象与对象之间的关系

在js中继承是指 一个对象有权去访问另一个对象的成员(属性和方法)

3,多态性: 体现在继承模型下,不同的对象继承自同一个对象的某一个方法。此时,该方法再具体的对象上的表现行为不同。

相关文章

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • JavaScript 原型和原型链

    原型 在 JavaScript 中,我们所称的原型有两个使用语境: 原型关系 原型属性 原型关系指对象的原型对象,...

  • JavaScript 原型和原型链

    原型 在 JavaScript 中,我们所称的原型有两个使用语境: 原型关系 原型属性 原型关系指对象的原型对象,...

  • 原型、原型链

    (什么是原型、原型链?有什么作用) JavaScirpt深入之从原型到原型链 图解 Javascript 原型链 ...

  • 关于原型原型链的理解

    什么是原型? 什么是原型链? 为什么需要原型,和原型链?

  • js的原型对象&原型链&js的继承

    原型对象 & 原型链 原型对象分2种:显式原型和隐式原型。 显式原型就是我们常用的prototype属性,是函数的...

  • 4.4 JavaScript

    4.4.1. 原型链 4.4.1.1. 显式原型和隐式原型   JavaScript的原型分为显式原型(expli...

  • 原型、原型链

    理解JavaScript原型 彻底理解JavaScript原型 原型 原型是一个对象,所有对象都可以成为原型,其...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • 2-6 原型和原型链 - 5个原型规则

    2-6 原型和原型链 - 5个原型规则 5条原型规则,原型规则是学习原型链的基础。 第一、所有引用类型(数组、函数...

网友评论

      本文标题:原型

      本文链接:https://www.haomeiwen.com/subject/wunehqtx.html