对象:字符和数值的映射es6
属性:访问映射函数
方法:属性的值是函数this
this 指向函数的接受者es5
var jane ={ //属性 name='Jane', //方法 describe:function(){ return 'Person named'+this.name; }
很是动态:自由删除增长属性prototype
继承(原型链继承)code
快速访问属性(经过构造器器)对象
引出共享属性继承
var jane = { name:"jane", describe:function(){ return 'Person named' +this.name; } }; var tarzan = { name:'Tarzan', describe:function(){ return 'Person named' + this.name; } };
解决方案:经过原型继承图片
jane 和 tarzan 经过共享一个原型对象。
原型链和简单对象同样
var PersonProto ={ describe:function(){ return 'Person named' +this.name; } } var jane = { __proto__:PersonProto, name:'Jane' }; var tarzan = { __proto__:PersonProto, name:'Tarzan' };
es6: _proto _
es5:
Object.create()
Object.getPrototypeOf()
Obejct.create(proto):
var PersonProto = { decribe:function(){ return 'Pseson named' + this.name; } }; var jane = Object.create(PersonProto); jane.name='Jane';
Object.getPrototypeOf(obj):
# Object.getPrototypeOf(jane) === PersonProto true
persons的构造器
function Person(name){ this.name = name; this.decsribe = funciont(){ return 'Person named' + this.name; }; } var jane = new Person ('Jane'); console.log(jane instanceof Person); //true
//特性的属性 function Person(name){ this.name = name; } //共享属性 Person.prototype.describe = function(){ return 'Person named'+ this.name; }
value instanceof Constr
检查 constructor.prototype是否在value的原型链上。
Constr.prototype.isPrototypeOf(value)
目标: employee 继承 Person
function Person(name){ this.name = name; } Person.prototype.sayHelloto = function (otherName){ console.log(this.name +'says hello to' + otherName); } Person.prototype.describe = function(){ return 'Person named' + this.name; }
Employee(name,title)和Person同样,除了:
其余属性:title
describe() return 'Person named <name> (<title>)'
为了继承,employee必须作:
继承Person的属性
创造属性title
继承Person的原型属性
重写Person.prototype.describe
function Employee (name,title){ Person.call(this,name); //继承全部属性 this.title = title ; //增长title属性 } Employee.prototype = Object.create(Person.prototype);//继承原型属性 Employee.prototype.describe = function(){//重写原型describe return Person.prototype.describe.call(this)+ '('+this.title+')'; //重写方法 }