模块化JS和原型继承
Modular JS and Prototypal Inheritance
我正试图在JS中理解prototypal inheritance
。一个模块有可能借用另一个模块的原型吗?
到目前为止,我处理这个问题的唯一方法是通过prototype chain
访问它。比方说,第一个模块还没有创建任何东西,我的第二个模块只是sol吗?
这里有一个例子:
var Cars = (function ( make, serial ) {
var obj = {};
var Car = function () {
this.make = make;
this.serial = serial;
}
Car.prototype.drive = function () {
console.log('vrrrooom')
}
obj[ serial ] = new Car()
return {obj:obj}
}( 'Toyota', '12345' ))
var Vans = (function ( make, serial ){
var obj = {}
var Van = function () {
this.make = make;
this.serial = serial;
}
Van.prototype = Object.create ( Cars.obj[ '12345' ] )
obj[ serial ] = new Van()
return {obj:obj}
}( 'Ford', '6789' ))
// So the Toyota drives?
console.log( Cars.obj )
Cars.obj[ '12345' ].drive() // Cool!
// Maybe my Ford can too?
console.log( Vans.obj )
Vans.obj[ '6789' ].drive() // Cool, but what if there were no Cars?
在Vans.obj[ '6789' ]
上调用drive
方法时,JS首先检查对象本身是否具有此属性。它没有,所以它检查了它的原型Cars.obj[ '12345' ]
。它也没有这个方法,所以检查了那个对象的原型Car.prototype
。该方法在那里找到并在Vans.obj[ '6789' ]
对象上执行。
如果在执行此行时未定义Cars.obj[ '12345' ]
:
Van.prototype = Object.create ( Cars.obj[ '12345' ] )
JS会抛出一个错误,因为不允许undefined
作为Object.create
方法的输入。
相关文章:
- JavaScript对象不是从原型链继承的
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- $emit,$broadcast,原型继承
- Javascript:继承原型而不重新定义构造函数
- 原型继承未按预期工作
- JavaScript中的原型继承.我可以称之为“超级”等价物吗?
- 为什么函数对象的实例没有继承函数原型属性
- 不创建父对象的原型继承
- Javascript基本继承与Crockford原型继承
- JavaScript-构造函数参数和原型继承
- 使用Object.create作为原型的原型继承将[Object]作为实例的原型
- javascript继承中正确的原型做作是什么
- 如何进行JavaScript原型继承(原型链)
- Javascript原型继承原型函数调用
- 对象不继承原型函数
- 从其他类继承原型方法,而不重写自己的原型方法
- JavaScript继承原型
- 继承原型
- Javascript继承/原型混淆
- 使用.call(this)继承原型