Javascript 如何使一个对象从另一个对象继承而不使用_uproto__;?

Javascript 如何使一个对象从另一个对象继承而不使用_uproto__;?,javascript,Javascript,我在Firefox中使用以下代码设置两个对象之间的原型继承关系: var a = {}; var b = {}; b.__proto__ = a; a.dosomething = function() { alert('ok'); }; b.dosomething(); //ok 但它只在Firefox上运行,因为\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu仅在Firefox中 在其他web浏览器中,如果a和b

我在Firefox中使用以下代码设置两个对象之间的原型继承关系:

var a = {};
var b = {};

b.__proto__ = a;
a.dosomething = function() {
   alert('ok');
};
b.dosomething();  //ok
但它只在Firefox上运行,因为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
仅在Firefox中

在其他web浏览器中,如果
a
b
是使用某种构造函数创建的,我可以使用

b.constructor.prototype = a;
设置继承关系

但是在上面的例子中,
a
b
的构造函数都是
Object
。 我无法更改
对象的原型

除了使用
\uuuu proto\uuuu
之外,是否有其他方法可以设置继承关系?

您可以使用。它创建一个对象,其原型就是传递给它的对象

var a={};
var b=对象。创建(a);
a、 dosomething=函数(){
警报(“正常”);
};
b、 dosomething();//好的
您可以使用。它创建一个对象,其原型就是传递给它的对象

var a={};
var b=对象。创建(a);
a、 dosomething=函数(){
警报(“正常”);
};

b、 dosomething();//确定
不要更改现有对象的原型

警告:更改对象的
[[Prototype]]
本质上是 关于现代JavaScript引擎如何优化属性访问,有一个非常重要的问题 在每个浏览器和JavaScript引擎中运行缓慢。这个 改变继承对性能的影响是微妙的 距离遥远,且不限于在
obj.\uuuu proto\uuuu=…
语句,但可以扩展到 可以访问其
[[Prototype]]
已更改的任何对象。 如果您关心性能,则应避免设置 对象的
[[Prototype]]
。而是使用 所需的
[[Prototype]]
使用

如果你这样做,标准的方法是,而不是

正确的方法是

var a={};
var b=对象。创建(a);
a、 dosomething=函数(){
console.log('ok');
};

b、 dosomething()不要更改现有对象的原型

警告:更改对象的
[[Prototype]]
本质上是 关于现代JavaScript引擎如何优化属性访问,有一个非常重要的问题 在每个浏览器和JavaScript引擎中运行缓慢。这个 改变继承对性能的影响是微妙的 距离遥远,且不限于在
obj.\uuuu proto\uuuu=…
语句,但可以扩展到 可以访问其
[[Prototype]]
已更改的任何对象。 如果您关心性能,则应避免设置 对象的
[[Prototype]]
。而是使用 所需的
[[Prototype]]
使用

如果你这样做,标准的方法是,而不是

正确的方法是

var a={};
var b=对象。创建(a);
a、 dosomething=函数(){
console.log('ok');
};

b、 dosomething()你的意思是
\uuuuu proto\uuuuu
?是的,在上面的代码中是proto,你不是把b设置为a的原型吗?在下面的代码中,您为什么要执行
b.constructor.prototype=a
而不是
b.prototype=a
?同样,你是对的对象是js中的母原型,我只是想更好地理解这个问题。你的意思是
\uuuuu proto\uuuuu
?是的,在上面的代码中是prototype,你不是将b设置为a的原型吗?在下面的代码中,您为什么要执行
b.constructor.prototype=a
而不是
b.prototype=a
?同样,你是对的对象是js中的母原型,我只是想更好地理解这个问题。这只是为了创建新的b(新对象),如果a和b已经存在,我可以设置继承关系吗?@arachide Yup。看我的编辑。太好了!感谢乐透这只是为了创建新的b(新对象),如果a和b已经存在,我可以设置继承关系吗?@arachide Yup。看我的编辑。太好了!谢谢