多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
js没有面向对象机制,或者说js没有实例,所有的“实例”都是将原型指向父“类”的一个新变量。 ``` var a = {name: 1, set: function(){this.name = 2}} var b = Object.create(a); //b没有name,通过原型链找到a的name b.name; //1 //调用原型链上的set,此时this使用了隐式绑定,指向b,因此为b创建了一个name属性 b.set(); //b --> {name: 2, __proto__: {name: 1, set: function(){this.name = 2}}} b.name; //2 a.name; //1 ``` ``` function Foo(who) { this.me = who; } Foo.prototype.identify = function() { return 'Im ' + this.who; } function Bar(who) { Foo.call(this, who); } Bar.prototype = Object.create(Foo.prototype); Bar.prototype.speak = function() { alert(this.identify()) } var b1 = new Bar('b1'); b1.speak(); //Im b1 //分割线 function Foo(who) { this.me = who; } Foo.prototype.identify = function() { return 'Im ' + this.who; } var b2 = new Foo('b2'); b2.__proto__.speak = function() { alert(this.identify()) } b2.speak(); //Im b2 //函数操作prototype,对象操作__proto__,二者实际上是一样的,只是访问的名字不一样 ```