gpt4 book ai didi

javascript - 在对象中公开原型(prototype)

转载 作者:数据小太阳 更新时间:2023-10-29 05:29:03 26 4
gpt4 key购买 nike

有没有办法通过另一个对象暴露一个对象的原型(prototype)?

  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' 对象设置了原型(prototype)继承——但暴露 bar 会失去对'shoutAge' 的继承。

但是,'boo' 对象在其内部声明了原型(prototype),并且外部函数可以访问方法 'shoutAge'

我不认为后者是最佳实践,即使它起作用。那么这里的最佳做法是什么?

我不希望 'bar' 的每个实例都有它自己的 'shoutAge' 方法,尤其是当可能有数百个 ' 实例时酒吧”。您通常会为 '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 函数定义得到 hoisted ,因此它在您返回的对象中可用,但原型(prototype)分配是 return 语句之后的附加语句,控制流永远不会到达它。只需将 return 移动到末尾即可解决问题。

关于javascript - 在对象中公开原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38151759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com