2014-09-05 4 views
0

Я новичок в прототипичное наследство, и я застрял в легкой задачеСоздание объекта на основе существующего объекта

У меня есть что-то вроде этого:

var test1 = { 
     clear : function() { 
     alert('hey'); 
     } 

} 

var test2 = { 
     varB : 2 

} 

Я хотел бы test2 простираются от test1. Может ли кто-нибудь дать мне направление? Должен ли я использовать Object.create, или, может быть, метод function + call? Я немного смущен здесь.

Каждый пример, который я нашел, основан на расширении, а затем установке атрибутов, методов и т. Д. Но мой объект уже объявлен здесь.

Спасибо!

+0

http://javascriptweblog.wordpress.com/2010/ 06/07/understanding-javascript-prototypes/ – tomaroo

ответ

0

Очень простой подход был бы

test2.__proto__ = Object.create(test1) 

Таким образом, вы будете иметь clear функцию, доступную в test2 объекте.

+0

[MDN Object.prototype .__ proto__] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto): '[...] Свойство __proto__ устарело и не должно использоваться. [.. .] ' –

0

Вы можете использовать prototype для выполнения наследования. Но это только один из некоторых способов наследования в javascript.

function test1() {} 
test1.prototype.clear = function() { 
    alert('hey'); 
} 

function test2() {} 
test2.prototype = new test1(); 
test2.prototype.varB = 2; 

var test2Instance = new test2(); 

Ищите больше методов наследования javasrcipt с помощью Google самостоятельно.

1

В современных браузерах, вы можете использовать Object.setPrototypeOf:

Object.setPrototypeOf(test2, test1); 

Там в настоящее время нет другого (официального) способа изменить прототип существующих объекта.

Если вы просто создать простой объект, вы можете использовать Object.create:

var test2 = Object.create(test1); 
test2.varB = 2; // or Object.assign(test2, {varB: 2}); 

Если вы на самом деле не нужно наследование, объединение объектов с Object.assign будет вариант:

Object.assign(test2, test1); 

Это просто копирует свойства от test1 до test2. В отличие от наследования, изменения на test1 не влияют на test2.


Для получения дополнительной информации, я предлагаю взглянуть на

Смежные вопросы