面向对象编程

Objects对象的原生方法分成两类:Object自身的方法(静态方法)和Object的实例方法。注意Object是JavaScript的原生对象,所有的其他对象都是继承自Object对象,故其它对象都是Object的实例。

Object的静态方法

Object.keys()方法与Object.getOwnPropertyNames(),参数是对象,返回一个数组,数组的值是改对象自身的所有属性名,——区别在于keys返回可枚举的属性,getOwnPropertyNames返回不可枚举的属性值。

Object的实例方法

Object.prototype.valueOf():返回当前对象的对应值.
Object.prototype.toString():返回当前对象对应的的字符串形式.
Object.prototype.toLocaleString(): 返回当前对象对应的的本地字符串形式.
Object.prototype.hasOwnProperety(): 判断某个属性是否为当前对象的自身属性,还是继承自原型对象
Object.prototype.isPrototypeOf(): 判断当对象是否为另一个对象的原型.
Object.prototype.propertyIsEnumerable(): 判断某个属性是否为枚举.

Array对象

<article>

对象是一个容器,封装一些属性(property)和方法的集合,属性是对象的状态,方法是对象的行为.JavaScript语言的对象体系,不是基于"类"的,
而是基于构造函数(constructor)和原型(prototype).
构造函数是对象的模板,专门用来生成实例对象的函数.构造函数的首字母大写,内部使用this关键字,生成对象的时候
,必须使用new命令.
new命令: 执行构造函数,返回一个实例对象.
Object.create()创建实例对象.

this关键字: 属性和方法"当前"所在的对象,总返回一个对象.
绑定this的三种方法:
Function.prototype.call()
Function.prototype.apply()
Function.prototype.bind()
使用场合: 全局环境是使用this,指的是顶层对象window.在构造函数中的this,指的是实例对象

严格模式: "use strict"; 严格模式必须从代码的一开始就生效,即写在第一行.
异步操作:
浏览器的JS引擎有多个线程,每个脚本只能在一个线程上运行.采用"事件循环"机制.

<p>

垃圾回收机制:利用垃圾收集器.周期性回收那些程序中,不被其他引用所执行的变量的内存资源,多是局部变量,用完就废.
常见的二种方式: 标记清除与引用计数,标记清除,当变量进入执行环境,如声明一个变量,垃圾回收机制将其标记进入"进入环境",当这个变量离开这个环境时,函数执行结束将其标记为"离开环境",清除.引用计数跟踪每个值被使用的次数,该值得到赋值+1,该变量的值变为另外一个-1.
OOP:面向对象编程,对象是一个容器,封装了属性(Property)和方法(method).
JAVA和C++都有类的概念,而类是对象的模板,对象是类的实例,但JS不是基于"类",基于"构造函数(constructor)"和"原型链(prototype).
构造函数:

     普通的函数,函数名首字母大写.生成对象就要使用new.new的作用就是执行构造函数,返回一个实例对象.<script>"use strict";var Cup = function(){ this.money= 77;};//let app = function() {this.money=100;};let Sun = new app(); Sun.money;//100 new 创建一个对象 用new this指向空对象,不用new this指向全局.//使用现有对象创建对象Object.create()var linyi = {naem: 'linyi',age:  '1000',do:function() {console.log("Hi"+this.name+".");}};let  linyi2 = Object.create(linyi);linyi2.name ;</script>

对象继承:

      A对象继承B对象,拥有B对象所有的属性和方法.继承通过"原型对象prototype".

编程规范:

      行为与样式分离.命名法: 大骆驼式命名法:首字母大写.小骆驼命名法:首字母小写.文件资源命名: 文件名不得含有空格,全部小写,多个单单词用- 使用相对路径.如src=”//img/s.jpg”变量,函数使用小骆驼,构造函数使用大骆驼.常量全部大写加下划线_.尽量不使用eval()函数.尽量不使用var,使用const.优先使用箭头函数,只使用单引号包裹字符串,禁止使用双引号,如果字符串中包含单引号字 符,应使用模板字符串.

模块加载:

      AMD提前加载模块,不管是否调用,先解析所有模块.CMD提前加载,在真正需要时,才解析该模块AMD(Require.js) CMD(Sea.js) UMD(Commonjs+AMD) Common.js(Node.js)

设计模式:

     设计模式有20多种,掌握常用四种: 单例模式,工厂模式,装饰器模式,观察者模式.

this指向:

    this是一个关键字,它用在不同的场合,但它总是返回一个对象.属性所在的当前对象是可变的,this的指向是可变的.

JavaScript的一切都是对象,运行环境也是对象,函数在某一个对象中运行时,this就是函数运行时所在的对象.但函数可以在不同执行环境运行,所以需要this执代当前的运行环境.

     三使用: (1)全局环境: this执向顶层对象window.(2)构造函数: this执向实例对象.(3)对象的方法: 当对象的方法里面包含this,this的指向就是方法运行时所在的对象.该方法赋值给另一个对象时,就会改变this的指向.三避免:(1)避免多层this.(2)避免数组处理方法中的this.(3)避免回调函数中的this.三绑定:(1)call();绑定this到某对象.(2)apply();接受一个数组,改变this指向.(3)bind();绑定个某对象,返回一个新函数,

关键字: call,apply,bind this.

三个方法call,bind,apply用于将this绑定到函数,即改变this指向.区别在于调用的方式.call()立即执行函数,但需要把参数按顺序传入 .apply()会立即执行函数,但需要把所有参数组合为一个数组传入.这两个差不多,但call函数会把数字作为一个参数.
.bind()传入参数的方式与.call()相同,但是返回一个新的函数,以及对应的环境与和参数.
.toString :返回函数的字符串表示

执行上下文:

        当前代码的执行环境.注意当代码开始执行时,形成执行上下文栈,全局执行上下文永远在栈底,当前执行执行的函数在栈定.每个执行上下文都有三个重要属性:变量对象,作用域链,this注意js引擎开始执行js代码时,最先进入的是一个全局的执行上下文,在全局的执行上下文中每调用一个函数,就会创建一个执行上下文的内部对象(作用域),一个执行上下文定义一个函数执行环境,每次执行每次的执行上下文独一无二,多次调用创建多个.执行上下文逐次执行,直到回到全局上下文.每个函数都有不同的上下文和作用域,作用域基于函数,上下文基于对象.

作用域链:

        一个函数,我们在里面再创建一段函数,父函数调用子函数的变量叫做闭包,但形成了单个作用域链,从子函数开始不断往上查找,就是作用域链.在js中,函数也是对象,对象中有些属性我们可以访问,有些不可以.不可以访问的属性进攻js引擎存取,如scope(作用域),存储了执行上下文的集合.其中执行上下文的对象集合,呈链式链接,叫做作用域链.

严格模式:

      页面第一行声明 "use strict"; 作用:禁止一些不合理与不严禁的语法,增加报错的场合, 提高编译器的效率.不可对只读属性赋值(字符串长度等),函数不能有重名的参数.禁止隐式全局变量声明,禁止this执行全局,禁止删除变量.禁止使用with语句,创设eval作用域,非函数代码块不可声明函数.

AJAX 跨域.内置对象: Object对象(首字母大写),Array,Boolean,Number,String,Math,Date,RegExp,JSON.
异步操作: 定时器和Promise对象.

异步操作:

   JavaScript只在一个线程上运行,但js引擎是多个线程.内部使用"事件循环(Event Loop)"机制.所有的任务分为同步任务和异步任务.同步任务在主线程排队,一个接着一个.异步任务:被引擎放在一边,进入任务队列的任务,不用执行完就可以执行下一步.任务队列: 主线程之外,用来处理当前程序处理的异步任务.异步任务可变同步,且有回调函数.定时器:定时执行代码.主要有两个函数setTimeout()和setInterval().向任务队列添加定时任务.

Object:顶层对象是Window对象,但所有的对象都继承Object对象,即所有的对象都是Object的实例.Object的原生方法,分Object本身方法(静态方法)和实例方法.<script>
//本身的方法,直接定义在本身.
Object.print= function () {console.log(0)};
//实例方法是定义在Object的原型对象Object.prototype上的方法,它可以被Object实例直接使用.
Object.prototype.print = function (){console.log(this);}; var obj = new Object;obj.print;();
//作为工具函数
var obj = Object();//转换为对象
//作为构造函数,生成新对象.
var Obja = new Object();
//此为有一些静态方法和实例方法.</script>

Array:

原生对象(内置对象之一),也是一个构造函数,也可用他它生成新的数组.一个静态方法和二十个实例方法.<script>var apple = new Array(2); arr.length;//2apple.isArray(arr);//true;判断是不是数组.var apple = [1,2,3];apple.valueOf();//[1,2,3]返回该值.apple.toString();//"1,2,3"返回数组的字符串形式.apple.push(1);//再数组末端添加一个或多个元素.apple.pop();//删除最后一个元素.apple.shift();//删除数组最后一个元素. apple.join();//以制定参数作为分隔符,分隔数组.['a'].concat(['world']);//合并数组.apple.reverse();//颠倒数组顺序.apple.slice(2,3);//提取数组返回,新数组.apple.splice();//删除原数组的一部分成员.apple.sort();//数组重新排序.apple.map();//将数组成员依次传入参数函数.apple.forEach();//将数组成员依次传入参数,但不返回值.apple.filter();//用于过滤数组成员.apple.some();//一真则真.apple.every();//全真才真.apple.reduce();//从左到右相加.apple.reduceRight();//从右到左想加.apple.indexOf();//指定数组第一次出现的位置.apple.lastIndexOf();//制定数组最后一次出现的位置.
</script>

JSON: 一种数据交换文本格式,每个JSON对象是一个值.JSON的对值的类型和格式有严格的规定.null,空对象,空数值都是合法的JSON值
javascript内置对象JSON对象,用来处理JSON格式数据,有两个静态方法.JSON.stringify()和JSON.parse()
<script>
//JSON.parse()将JSON字符串转换成对应的值.
JSON.parse('{}')//{}
//JSON.stringify()将一个值转为JSON字符串.
JSON.stringify('abc')//""abc""
</script>
RegExp对象:
一种表达文本模式的方法.新建有二种.使用字面量用/包括.使用RegExp构造函数.
Date对象:
javascript原生的时间库,它以1970.1.1.00:00:00作为零点,上下可表示一亿天.
用法: 作为普通函数和构造函数 三种静态方法: Date.now() Date.parse() Date.UTC()
实例方法: ValueOf和toString,之外还有三类: to类,get类,set类.
<script>
//普通函数
Date()//直接使用,返回当前时间,加参数也没用.
//构造函数
let Today = new Date();
Today; //这里返回的实例等于Today.toString()
Today.valueOf() //返回距离零点的毫秒数===getTime
Date.now()//返回距离零点的毫秒数
Date.parse()//解析日期字符串.同样返回距离零点的毫秒数.解析失败,返回NaN.
Date.UTC() //接受年,月,日等变量作为参数,返回该时间距离零点的时间.
</script>
Math对象:

内置对象,该对象不是构造函数,不能生成实例,提供各种数学功能.内置一些静态数学和方法.<script>
//返回常数e ,2的自然对数,10的自然数,以2为底的e的对数,以10为底的e的对数,常数PI.0.5和2的平方根.
Math.E; Math.LN2; Math.LN10; Math.LOG2E;Math.LOG10E;Math.PI;Math.SQRT1_2;Math.SQRT2;
//上面的数学都是只读的,不可修改.
//静态方法
Math.abs(); Math.ceil(); Math.floor();Math.max();Math.min();Math.pow();Math.sqrt();
Math.log();Math.exp();Math.round();Math.random();
//一些三角函数方法
Math.sin();Math.cos();Math.tan();Math.asin();Math.acos();Math.atan();</script>

包装对象:三种原始类型的值(数值,字符串,布尔值)封装的对象.内置了一些属性和方法.包装对象都从Object对象继承两个方法valueOf和toString.valueOf()方法返回包装对象实例对应的原始类型的值.toString()方法返回对应的字符串形式.

Bollean对象:

JavaScript对象作为JavaScript的三个包装对象(Number,String)之一.
用法: 作为构造函数和日常使用.<script>//作为构造函数let a = new Boolean(true);typeof a;a.valueOf() //true//日常单独使用Boolean(null)//false;Boolean(1)//true;!!0//false!![]//ture;</script>

Number对象:

包装对象之一,用法二种:构造函数和工具函数.封装了一些静态属性和方法.也可自定义方法.<script>//用于构造函数let a = new Number(1); //a为生成值为数值的对象.//工具函数Number(true) //1 将true转为1 将任何数据类型的值转为数值.Number.NaN//NaN//实例方法(100).toString();//"10"数字转字符串(100).toFixed();//转换为对应的字符串(222).toExponential();//转换为科学计算法(333).toPrecision(1);//转换为指定位数的有效数字.</script>

String对象
包装对象之一,用来生成字符串对象(很像数组的对象,但不是数组).一个静态方法,一个实例属性,十六个实例方法.<script>
//作为工具方法使用,将任意类型的值转为字符串
String(true);//"trye"
String.fromCharCode(104,101,108,108,111);//将参数值代表的Unicode码点转为字符串.
'abcdegf'.length; //7
let rain = new String("abcdefg");
rain.charAt(1);//"b"返回指定位置的字符=='abcdefg'[1]
rain.charCodeAt(1)//98返回指定位置字符串的Uniocde码点.无参返回首字符的码点.参数为负数或大于时,返回NaN.
let b = new String('0101');
rain.concat(b)//"abcdefg0101"连接两个字符串,返回一个新字符串.
rain.slice(0,1)//"ab"返回参数截取的字符,参数为负时,倒计数.一参大二参时,返回空字符串"".
rain.substring(0,1)//"ab"相似与slice,规则不好记,尽量不要用,用slice.
rain.substr()//"ab"大致与slice相同,二参为截取的长度,为负时转为0.
rain.indexOf('c')//3字符出现的位置.
rain.lastIndexOf('c')//4从尾部开始计数位置.
rain.trim()//去除字符串的两端的空格.
rain.toLowerCase();//将字符串全部转为小写.
rain.toUpperCase();//全局字符串转为大写.
rain.math('abc');//abc返回匹配到的字符,无则null.
rain.search('ab');//1返回匹配的第一个相符字符的位置.
rain.serach('a','1');//'1bcdefg'替换字符
rain.spilt('|');//["a","b","c","d","e","f""g]返回分割的字符串
rain.localeComparse('banana')//比较二个字符,一大二,返回值大于0,相等返回0,小于返回小于0 </script>方法:
parseInt()将字符串转为整数 parseFloat()将字符串转为浮点数 isNaN()判断一个值是否为NaN.
isFinite()返回布尔值,表示某个值是否为正常的数值.false有+/-Infinity NaN undefined
split() 把字符串分割为字符串数组.
Math.ceil();向上取整. Math.round();四舍五入.Math.floor();向下取整.
valueOf() 返回某个字符串对象的原始值。
concat() 连接两个或更多的数组,并返回结果。
pop() 删除并返回数组的最后一个元素
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
reverse() 颠倒数组中元素的顺序。
shift() 删除并返回数组的第一个元素
sort() 对数组的元素进行排序
<script>

  //正则表达式//检验基本日期格式var reg1 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;var reg2 = /^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$/;//效验密码强度,必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。var reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/;//校验中文,字符串仅能是中文var reg = /^[\\u4e00-\\u9fa5]{0,}$/;//由数字、26个英文字母或下划线组成的字符串var reg = /^\\w+$/;//校验E-Mail 地址var reg = /[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?/;//. 校验身份证号码 15或18var reg = /^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$/;var reg = /^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/;//效验日期var reg = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;//. 校验金额,精确到2位小数var reg = /^[0-9]+(.[0-9]{2})?$/;//判断IE的版本var reg = /^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\\/[5-9]\\.0).*$/;//校验ipv6地址var reg = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/;//校验IP-v4地址var reg = /\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b/;//检查URL的前缀,应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。if (!s.match(/^[a-zA-Z]+:\/\//)) {s = 'http://' + s; }//提取url链接var reg = /^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/;//文件路径与扩展名效验,验证windows下文件路径和扩展名(下面的例子中为.txt文件)var reg = /^([a-zA-Z]\\:|\\\\)\\\\([^\\]+\\)*[^\\/:*?"<>|]+\\.txt(l)?$/;//提取Color Hex Codes,有时需要抽取网页中的颜色代码,可以使用下面的表达式。var reg = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;//提取网页图片,假若你想提取网页中所有图片信息,可以利用下面的表达式。var reg = /\\< *[img][^\\>]*[src] *= *[\\"\']{0,1}([^\\"\'\ >]*)/;//提取页面超链接,提取html中的超链接var reg = /(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\/\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>/;//查找CSS属性var reg = /^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}/;//抽取注释,如果你需要移除HMTL中的注释,可以使用如下的表达式。var reg = /<!--(.*?)-->/;//转换千分位分隔符return total.toString().replace(/\B(?=(\d{3})+$)/g, ',');

</script>
跨域 :一个域下的文档或脚本试图去请求另一个域下的资源.(广义).浏览器同源策略限制的一类请求场景(狭义).

如: 资源跳转: A链接,重定向,表单提交.资源嵌入:<link><script></script><img><frame>等dom标签
样式中:background:url().@font-face()等文件外链.脚本请求:js发起的ajax请求,dom和js对象的跨域操作等.

跨域限制:

 服务器的一个行为,当开启对某些域名的访问限制后,只有同域或指定域名下的页面可以调用.一般情况下只在用浏览器端存在,对于服务器/ios/andriod等客户端是不存在的.

同源策略(SOP)

 它是一种约定,即"协议/域名/端口"必须相同.防止XXS,CSRF等攻击.限制了Cookie,LocalStorage和IndexDB无法读取.DOM和JS对象无法获得.AJax请求不能发送.

get请求与post请求:

  本质都是tcp协议,http的规定和浏览器与服务器的限制,在应用的过程有所不同,get产生一个tcp数据包,post产生两个数据包,GET求,浏览器会把http的header和data一并发送出去.服务器响应200(返回数据),对于post,浏览器先发header,服务器响应100 浏览器再送data,服务器响应200(返回数据).

前后端通信中ajax只支持同源策略,websocket不受同源策略影响,CRO新标准,都支持.
9种跨域解决方案
(1)jsonp跨域(2)document.domain + iframe跨域 (3)location.hash + iframe (4)window.name + iframe跨域
(5)postMessage跨域(6)跨域资源分享(CROS)(7)nginx代理跨域 (8)node中间件代理跨域(9)WebSocket协议跨域
json: javascript对象表示法,轻量级的文本数据交换格式.具有层级结构,可使用AJAX进行传输.json语法是js语法的子集,
JSONP:是json的一种"使用模式",可以让网页从别的域名获取资料.只支持GET请求,CORS支持所有类型的HTTP请求.JSONP优势在于支持老师浏览器,以及可以向不支持CORS的网站请求数据.原理是script src 本质就是一个回调函数,然后在远程服务器上调用这个函数并且将json数据形式作为参数传递,完成回调.对象格式的字符串,轻量的数据传输格式. 注意:键值需要""包起来.

 两个方法:JSON.parse 和 JSON.stringify  JSON.parse,将后台传来的字符串转化为对象。其字符串的内容就是对象才需要这个转化.JSON.stringify,将后台传来的对象转化为字符串。

<script>

  //原生实现var script = document.createElement('script');script.type = 'text/javascript';//传参并指定回调执行函数为onBackscript.src = "http://www.domain2.com:8080/login?user=admin&callback=onBack"document.head.appendChild(script);//回调函数function onBack(res) {alert({JSON.stringify(res)});}//服务器返回如下(返回时即执行全局函数)onBack({"status":true,"user":"admin"})//jqery ajax$.ajax({url: 'http://www.domain2.com:8080/login',type: 'get',dataType: 'jsonp', //请求方式为jsonpjsonpCallback: "onBack" //自定义回调函数data: {}});

//方法document.domain +iframe 仅限于主域相同,子域不同的跨域应用场景
//两个页面都通过js强制设置document.domain为基础主域,实现同域.

 //父<iframe id="iframe" src="http://child.domian.com/b.html"><iframe>document.domain = "domain.com";var user = 'admin';//子document.domain = 'domain.com';alert('get js data from paretn --->' + window.parent.user)//添加<script>标签的方法
function addScriptTag(src) {var script = document.createElement('script');script.setAttribute("type", "text/javascript");script.src = src;document.body.appendChild(script);
}// 向后台发起请求(链接是胡乱写的)
addScriptTag('http://www.qq.com/getJsonp?callback=jsonCallback')//jQuery ajax,逐渐退出历史舞台,基于原生的XHR开发.Ajax是用JS向服务器发送请求,并获取服务器返回的内容,整个页面并没有刷新.通常用Ajax请求JSON的格式的数据$.ajax({type: 'POST',url: url,data: data,dataType: dataType,success: function () {},error: function () {}
});//axios目前主力将军,promise实现版本
axios({
method: 'post',
url: '/user/12345',
data: {firstName: 'Fred',lastName: 'Flintstone'}}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});//Fetch 未来的娇子 还需成长
try {let response = await fetch(url);let data = response.json();console.log(data);
} catch(e) {console.log("Oops, error", e);
}

//原生跨域请求

var script = document.createElement('script');
script.type = "text/javascript";
//传参数并指定回调执行函数为onBack
script.src = "http://www.baidu.com:8080/login?user=admin&callback=onBack;"
document.head.appendChild(script);
//回执行函数
function onBack(res) {alert(JSON.stringify(res));
}$.ajax({url: 'http://www.baidu.co:8080/login',type; 'get',dataType: 'jsonp', //请求方式为jsonpjsonCallback: "onBack",data: {}
});
//Vue
this.$http.jsonp('http://www.baidu.com:8080/login',{params: {},jsonp: 'onBack'
}).then((res) => {console.log(res);
})

</script>

前端_JavaScript_面向对象编程相关推荐

  1. 前端与移动开发----JS高级----面向对象编程,类与实例对象,继承,严格模式,模板字符串,class封装tab栏

    JS高级01 回顾上阶段 Javascript组成 ECMAScript: 基础语法 (变量, 表达式, 循环, 判断, 函数, 对象等) DOM: document 操作标签(获取, 增加, 插入, ...

  2. 【前端系列教程之JavaScript】15_JavaScript面向对象编程

    JavaScript面向对象编程 面向对象概述 什么是对象 Everything is object (万物皆对象) 对象到底是什么,我们可以从两次层次来理解. (1) 对象是单个事物的抽象. 一本书 ...

  3. 《JavaScript面向对象编程指南》——第1章 引言1.1 回顾历史

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.1节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  4. 《javascript面向对象编程指南》读书笔记

    <javascript面向对象编程指南>读书笔记 <javascript面向对象编程指南>读书笔记 第一章 面向对象的JavaScript 第二章 基本数据类型与流程控制 变量 ...

  5. [Object]面向对象编程(高程版)(二)原型模式

    [Object]面向对象编程(高程版)(二)原型模式 博客分类: Web前端-JS语言核心 作者:zccst 三.原型模式 每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个 ...

  6. TIA Portal面向对象编程入门

    软件工程从面向过程编程发展到面向对象编程(OOP:Object-Oriented Programming)被认为是程序设计方法学的一场实质性革命,是程序设计方法学的一个重要里程碑.尽管时至今日依然有少 ...

  7. java面向对象编程基础

    java面向对象编程基础 前言:什么是java 是咖啡飘香的清晨 - 是斯坦福校园意浓情深 - 是James的思想睿智 是剁手党双十一挥舞的利刃 是大数据云计算驰骋的平台 - 是ATM上吐出的钞票 - ...

  8. 面向对象编程(Python版详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  9. Object Oriented Programming面向对象编程

    OOP 面向对象编程( Object Oriented Programming)是一种 计算机编程 架构.OOP 的一条基本原则是 计算机程序是由单个能够起到子 程序作用的单元或 对象组合而成.OOP ...

最新文章

  1. Win7环境下搭建GO开发平台——SublimeText 2
  2. 李铁:《非诚勿扰》与虚弱的中国人——写的太好了
  3. layui循环数据并渲染_layui使用表格渲染获取行数据的例子
  4. c++类的静态成员特性
  5. 绘图解谜:公钥、私钥、证书
  6. ASP.NET企业开发框架IsLine FrameWork系列之三--七种武器
  7. Golang并发读取超大文件
  8. 抽象类java启动线程_java 线程复习笔记
  9. 百度关键词点击ios_百度推广关键词点击价格高,如何处理?
  10. DNS的正、反以及双向解析
  11. Matlab 警告: 名称不存在或不是目录
  12. Java 软件安装流程详解
  13. 一完整的HTTP事务是怎样的过程
  14. 胚胎干细胞研究成果集锦,目录大合集
  15. 六个免费网站状态监控服务
  16. 功能需要富文本编译器图片不转base64,琢磨了一下,上代码
  17. 计算机网络-基本概念
  18. 51单片机去读取JY61陀螺仪的数据操作方法
  19. 九大行星 神话 英文
  20. Spark中组件Mllib的学习19之分层抽样

热门文章

  1. boost::hana::arg用法的测试程序
  2. boost::mpl::integral_c用法的测试程序
  3. boost::successive_shortest_path_nonnegative_weights用法的测试程序
  4. boost::graph模块实现closeness中心性的测试程序
  5. boost::int64_t模块int64 范围的测试程序
  6. GDCM:gdcm::SwapperDoOp的测试程序
  7. Boost:双图bimap与Boost类型的测试程序
  8. Boost:connect pair连接对测试程序
  9. OpenCV非线性可分离数据的支持向量机的实例(附完整代码)
  10. Qt Creator创建一个移动应用程序