2013-12-02 2 views
0

Я знаю, что это просто и, вероятно, есть некоторые, где я просто не уверен, что искать «наследование класса»? Я пытаюсь получить доступ к функции судна this изнутри груза. Идеи?Доступ к родительским «этим» переменным, из унаследованного класса

var Ship = function() { 
    this.id = Math.floor(Math.random() * 1000000); 
}; 

var Cargo = function(){ 
    this.id = Math.floor(Math.random() * 1000000); 
} 

Cargo.prototype.push = function(string){ 
    return string; 
} 

Ship.prototype.cargo = Cargo; 

module.exports = Ship; 
+0

Что вы подразумеваете под "ship' this' function "? Значение 'this' в' Ship' не должно быть функцией. Значение 'this' определяется тем, как вызывается функция. Нет статического значения 'this'. –

+0

Мне нужны свойства корабля в грузе. Имеет ли это смысл? – ThomasReggi

+0

после повторного чтения вашего вопроса, почему груз унаследовал от корабля? Модель домена не имеет смысла. имеет смысл использовать инъекцию зависимостей (см. ответ ниже) –

ответ

1

Функция прототипа уже может получить доступ к this экземпляра.

var Ship=function() { 
    this.id=Math.floor(Math.random()*1000000); 
}; 

var Cargo=function() { 
    this.id=Math.floor(Math.random()*1000000); 
}; 

Cargo.prototype.push=function (string) { 
    return string; 
}; 

Ship.prototype.cargo=function() { 
    var cargo=new Cargo(); 
    cargo.ship=this; 
    return cargo; 
}; 

var ship1=new Ship(); 
var cargo1=ship1.cargo(); 
var cargo2=ship1.cargo(); 
alert(cargo1.ship.id===cargo2.ship.id); 

var ship2=new Ship(); 
var cargo3=ship2.cargo(); 
var cargo4=ship2.cargo(); 
alert(cargo3.ship.id===cargo4.ship.id); 

alert(cargo1.ship.id===cargo3.ship.id); 
1

Вы можете расширить объект либо с помощью подчеркивания или имитировать его источник:

http://underscorejs.org/#extend

http://underscorejs.org/docs/underscore.html#section-78

Edit: я думаю, что вы хотите это.

var Cargo, Ship, cargo; 

Ship = (function() { 
    function Ship() {} 

    return Ship; 

})(); 

Cargo = (function() { 
    function Cargo(ship) { 
    this.ship = ship; 
    } 

    return Cargo; 

})(); 

cargo = new Cargo(new Ship()); 

alert(cargo.ship); 
+0

Я хочу, чтобы весь груз имел один и тот же корабль, это делает новый корабль для каждого груза. – ThomasReggi

+0

var ship = new Ship(); var cargo1 = new Груз (судно); var cargo2 = new Груз (судно); (все тот же корабль - один из способов его решения путем депрессии). –

+0

Я бы не хотел включать судно в груз. – ThomasReggi

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