原型


title:2018.7.26分享总结

tags:分享总结

原型

这里写图片描述

prototype

定义:是function对象的一个属性,它定义了构造函数构造出的对象的公共祖先,通过该构造函数产生的对象,可以继承该原型的属性和方法。
image
【注】:
(1) 原型也是一个对象
(2) 不能通过构造出的实例去更改原型的属性
(3) 每一个function对象都会自带一个prototype属性以及一个proto属性
(4) 每一个对象都会自带一个proto属性

__proto__

原型作为对象的内部属性,是不能被直接访问的,所以,部分浏览器提供“proto”的访问器去访问原型。其中实例的proto和构造函数的原型完全相等。如下代码所示:

function Car(){

}
var car = new Car();
console.log(car.__proto__ === Car.prototype); //true

关系图如下:
image

constructor

constructor是原型的一个属性,指向关联的构造函数。如下代码所示:

function Car(){

}
var car = new Car();
console.log(Car.prototype.constructor === Car); //true

关系图如下:
image

用法:1.将公有元素保存到原型里面
实例1:

function Car(color,owner){
    this.owner = owner;
    this.carName = "BMW"this.height = 1400;
    this.lang = 4900;
    this.color = color;
}

var car = new Car('red','hedy');

上面的代码每次执行都会去执行流程化生产的属性,例如carName,height等,造成代码冗余,解决这个问题,将共有代码提到原型里面,原型只需要加载一次,不用每次执行都去加载,然后根据原型继承,可在实例中使用。改造后的代码如下:

Car.prototype.carName = "BMW";
Car.prototype.height = 1400;
Car.prototype.lang = 4900;
function Car(color,owner){
    this.owner = owner;
    this.color = color;
}
var car = new Car('red','hedy');

原型链

Grand.prototype.name = "hedy"
function Grand(){

}
var grand = new Grand();
Father.prototype = grand;
function Father(){
    this.name = "judy";
}
var father = new Father();
Son.prototype = father;
function Son(){
    this.hobbit = "smoking";
}
var son = new Son();

如上代码中,当打印son.name时,在Son自己的构造方法里面是找不到name属性的,然后就顺着son.proto,也就是Father.prototype中去查找,自然找到并打印judy,此时,可以看到在代码中Grand原型里面也有一个name属性,但是js查找过程是就近原则,最先找到谁就是谁,后面不会再去查找。
不难看出,son,father以及grand之间是通过proto去连接的,查找的时候也是根据这个属性一级一级往上查找。

关系图如下:
![image]https://github.com/hdddddd/image/blob/master/prototypeLink.png?raw=true)

如上图所示,此处只画了grand到object两个阶段,可以看到该条原型链最终指向的是null,因此,该原型链的终端就是object.prototype。

提问:是否所有对象最终都会继承自Object.prototype。
答:不是,有特例。当使用Object.create()创建一个具有指定原型且可选择性的包含指定属性的对象,可传两个参数,第一个是prototyoe,必须,可以是null;第二个参数是可选的。
当传入的第一个参数是null时,返回回来的对象是没有原型的,所以它不存在继承自Object.prototype.

如此下图所示:

image

原型陷阱

Person.prototype.name = "sunny";
function Person(){

}
var person = new Person();
Person.prototype = {
    say:function(){
        console.log("hehe")
    }
}

当对原型对象执行完全替换的时候,可能会触发原型链中的某种异常,并且当重写了某对象的prototype时,该对象原型的constructor指向的是Object而不是Person,因此,当重写了某对象的prototype时,需要重置一下constructor方法,即Person.prototype.constructor = Person.

Ajax

定义:相当浏览器和服务器的中间层,其中最重要的是对象XMLHttpRequest对象。
状态(readyState):分为以下5种:
① 0:未初始化状态(此时刚创建XMLHttpRequest实例)
② 1:启动状态(此时调用open方法)
③ 2:发送状态(调用send方法,但此时已经有部分数据被接收)
④ 3: 接收状态(对数据进行接收及处理)
⑤ 4:完全接收数据并完成数据的处理

方法

(1) onreadystatechange:该方法会在readystate的状态改变时触发。
(2) open(method,url,true/false):强调第三个参数,主要是同步和异步的控制,默认是true,异步方式。
(3) send():参数格式:null,xml,.txt
(4) setRequestHeader():发送时可设置请求头
(5) getResponsHeader():接收响应数据
(6) overrideMimeType():决定内容用什么形式显示
(7) onloadend():error时触发或者调abort时主动触发

(8) post:载体:http键值对形式,以form形式提交
(9)get:载体:直接在http中

封装

1.axios(原理参照promise)
      特性:(1) 拦截请求并响应
            (2) 自动转换json格式
            (3) 客户端支持跨域伪造
            (4) axios.get(url,配置,数据).then
            (5) 并发请求
2.fetch

经典的63套Axure安卓组件库,实用。 10PX Android.rplib acleandesign_better_defaults_5.5.rplib android widget by YEFAN.rplib Android手机外壳及UI组件库.rplib Android组件库.rplib Audio_Icons_Axure_Library.rplib Axure RP社交网络元素库.rplib AxureRP-win7phone-AxureRP-Library.rplib Axure反馈表单.rplib Axure图标 (16×16).rplib Axure图标(32×32).rplib Better Defaults (acleandesign).rplib Better Defaults .rplib ClearTextvalueOnFocus_conetrees.rplib Content.rplib DGI_touchscreen_handgestures.rplib EXTJS-Tab.rplib facebook-like.rplib icon-UX_People.rplib Icons_Audio.rplib iOS iPad Wireframe.rplib ipad.rplib iPhone-Bodies.rplib iPhone-Horizontal.rplib iPhone-UI.rplib JQuery Mobile.rplib Mobile-android_DSK.rplib mobile-iPhone-Horizontal.rplib mobile-iPhone-UI.rplib modest_mouse_cursors.rplib OSX_widgets_v101.rplib PureAndroid_by.joby.rplib Sharing.rplib Shopping.rplib Slider_Library_by_truematter.rplib Social Widgets .rplib social_media_icons_vim_interactive.rplib Tabs.rplib Tabs_Y!DSK.rplib VoteFor_Smileys_(erric).rplib WidgetLib_v1.rplib win7phone-Library.rplib.rplib 图标组件库.rplib 图表和表格.rplib 导航和分页.rplib 屏幕分辨率.rplib 幻灯片.rplib 广告位.rplib 广告位标准尺寸组件库.rplib 手机-General.rplib 手机-iPhone.rplib 控制条.rplib 操作系统元素.rplib 操作系统窗口.rplib 文本模板.rplib 日历.rplib 窗体和容器.rplib 网站常用部件.rplib 草稿样式库文件.rplib 菜单和按钮.rplib 表格元素.rplib 输入框.rplib 页面布局.rplib
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值