// 原型
// 问:为什么引入prototype属性
// 答:使N多个同一个构造函数生成的实例对象共享同一个属性,达到共享属性和方法
// es6之前js没有类的概念,所以有构造函数
// 但是es6引进了class类的概念,new出来的实例对象对应的构造函数写法有所改变
// 原型链
// 概念:一个对象有它自己的原型对象_proto_,这个原型对象还有它自己的原型对象,当查找对象属性时,
// 先去对象里去找,对象里没有再去它的原型对象里去找,以此类推,形成了原型链
// _proto_和prototype
function a11(){}
a11.prototype.name = "jiaojiao"
var func = new a11()
console.log(func);
//打印: a11 {}
// __proto__:
// name: "jiaojiao"
// constructor: ƒ a()
// __proto__: Object
//_proto_指向Function.prototype,既 func._proto_ = a11.prototype
// new生成的对象实例func会含有一个constructor属性 指向他们的构造函数a11()
// console.log(func.constructor == a11); //true
// 构造函数的继承、非构造函数的继承
// 一. 第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行:
// call() ,apply() 他们可以用来调用所有者对象作为参数的方法。
// 区别call()分别接受参数, applay接受数组形式的参数
// var person = {
// first:function(){
// return this.name
// }
// }
// var person1 = {
// name: '苗杉杉'
// }
// console.log(person.first.call(person1))
// 二、 prototype模式
// 三、 直接继承prototype
// 四、 利用空对象作为中介
// 五、 拷贝继承
var promise = new Promise(function(resolve, reject) {
console.log(resolve);
console.log(reject);
// 异步处理
// 处理结束后、调用resolve 或 reject
});