Наследование JavaScript с Object.create ()?

Как я наследовался с Object.create ()? Я попробовал их, но ни один не работает:

var B = function() {};
var A = function() {};
A = Object.create(B);
A.prototype.C = function() {};

и

var B = function() {};
var A = function() {};
A.prototype.C = function() {};
A = Object.create(B);

и

var B = function() {};
A = Object.create(B);
var A = function() {};
A.prototype.C = function() {};

Ничто не работало. Как я, как предполагается, использую этот новый Object.create () - функция?

15
задан hippietrail 31 January 2013 в 11:06
поделиться

4 ответа

Object.create() используется для наследования объектов, а не конструкторов, как вы пытаетесь сделать. Он практически создает новый объект со старым объектом в качестве его прототипического родителя.

var A = function() { };
A.prototype.x = 10;
A.prototype.say = function() { alert(this.x) };

var a = new A();
a.say(); //alerts 10

var b = Object.create(a);
b.say(); //alerts 10
b.x = 'hello';
b.say(); //alerts 'hello'

И чтобы убедиться, что b не является просто клоном a,

a.x = 'goodbye';
delete b.x;
b.say(); //alerts 'goodbye'
22
ответ дан 30 November 2019 в 23:55
поделиться

Исходная документация для Object.create Дугласа находится здесь http://javascript.crockford.com/prototypal.html . Убедитесь, что вы включили определение метода

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}
0
ответ дан 30 November 2019 в 23:55
поделиться

Вы можете определить Object.create самостоятельно, но если он не является родным, вам придется иметь дело с его перечислением в каждом цикле for in, который вы используете для объектов.

Пока что только новые веб-наборы - Safari5 и Chrome изначально поддерживают его.

0
ответ дан 30 November 2019 в 23:55
поделиться

Вы можете найти полезную информацию о наследовании JavaScript в Центре разработки Mozilla.

0
ответ дан 30 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: