在对象中公开原型
Expose prototypes in object
是否有一种方法可以通过另一个对象暴露对象的原型?
var foo = function () {
var foo = {
bar: bar,
boo: boo
}
return foo;
function bar (age) {
this.age = age;
}
bar.prototype.shoutAge = function () {
alert('My age is ' + this.age);
}
function boo (age) {
this.age = age;
boo.prototype.shoutAge = function () {
alert('My age is ' + this.age);
}
}
}
var foo = foo();
var far = new foo.bar(13); // bar {age: 13}
far.shoutAge(); // far.shoutAge is not a function
var far = new foo.boo(13); // boo {age: 13} with __proto__
far.shoutAge(); // alert('My age is 13');
在这段代码中,'bar'对象被设置为原型继承——但是暴露bar会失去' sh停用'的继承。
但是,'boo'对象内部声明了原型,并且外部函数可以访问' sh停用'方法。
我不认为后者是一个最佳实践,即使它的功能。那么最好的做法是什么呢?
我不希望'bar'的每个实例都有自己的' sh停用'方法,特别是当'bar'可能有数百个实例时。你通常会为'bar'创建一个单独的对象,而不是通过'foo'来暴露它吗?
看起来这只是一个操作顺序问题:
var Foo = function () {
function bar (age) {
this.age = age;
}
bar.prototype.shoutAge = function () {
alert('My age is ' + this.age);
}
var foo = {
bar: bar,
boo: boo
}
return foo;
}
我认为这是因为bar.prototype
赋值从来没有在你的代码中执行。bar
函数定义被提升,因此它在您返回的对象中可用,但是原型赋值是return
语句之后的附加语句,并且控制流永远不会到达它。只需将return
移到末尾即可解决此问题。
相关文章:
- Node.js中的JavaScript原型对象效率
- 获取原型对象的名称
- 如何维护对原型对象的访问
- 文字与原型对象表示法的数据结构
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 正在重置原型对象的构造函数属性
- 编写JS原型时,所有函数都应该使用原型对象
- 什么's是原型对象的真实名称
- Javascript - 使用数组作为函数的参数,并在创建新的原型对象时更改值
- 在原型对象 jquery 上将一个按钮与另一个按钮不同
- 原型对象
- 循环遍历数组时的原型对象
- 为什么初始化的 JavaScript 对象不包含原型对象
- JavaScript 原型对象 - 如何访问继承
- Javascript:获取此原型对象名称
- 如何在数据绑定后在 KNOCKOUT js 中使用“with”访问另一个原型对象
- 这在 JavaScript 中的原型对象中的值
- 在主干中向原型对象添加值不起作用
- 删除函数原型对象
- 为什么当我在这个JavaScript对象上使用反射时,我可以'看不到在其原型对象中定义的属性