2012-02-03 56 views
1

所以我得到这个错误;对象#没有方法'carName' 但我清楚地做到了。 Pastebin对象#<person>没有方法'carName'

我也试图与

player.car.model 

参考汽车的“模式”属性,但不工作,我得到一个类型错误。有任何想法吗?你需要更多信息吗?

function person(name, car) { 
    this.name = name; 
    this.car = car; 
    function carName() { 
     return car.model; 
    } 
} 

var player = new person("Name", mustang); 
var bot = new person("Bot", mustang); 
var bot2 = new person("Bot 2", mustang); 

function makeCar(company, model, maxMPH, tireSize, zeroToSixty) { 
    this.company = company; 
    this.model = model; 
    this.maxMPH = maxMPH; 
    this.tireSize = tireSize; 
    this.zeroToSixty = zeroToSixty; 
} 

var mustang = new makeCar("Ford", "Mustang GT", 105, 22, 8); 
var nissan = new makeCar("Nissan", "Nissan 360z", 100, 19, 6); 
var toyota = new makeCar("Toyota", "Toyota brandname", 95, 21, 7); 
+0

请澄清问题。现在它非常接近“它不工作,修复它” – akonsu 2012-02-03 02:26:31

+1

@DoubleElite,请尝试粘贴到问题的样本(并尽可能小,同时),而不是只提供链接到某个位置。 – 2012-02-03 02:32:49

回答

3

它没有方法。它有一个对构造函数的变量作用域是局部的函数。

为了让每个对象的功能,将其指定为一个属性...

function person(name, car) { 
    this.name = name; 
    this.car = car; 
    this.carName = function() { 
     return this.car.model; 
    }; 
} 

或者更好,把它放在构造函数的prototype ...

function person(name, car) { 
    this.name = name; 
    this.car = car; 
} 

person.prototype.carName = function() { 
    return this.car.model; 
}; 

而且,mustang在将它传递给构造函数person时未初始化。

+0

[这是一个工作示例](http://jsfiddle.net/sZuw7/)如果有帮助。 – 2012-02-03 02:40:41

+0

谢谢,虽然有一个问题。为什么使用“person”函数的原型构造函数要比赋予函数属性更好(第一种方法)。他们不是在做同样的事吗?因为人会继承原型构造函数。 – 2012-02-03 04:34:54

+0

@DoubleElite:对象从'person'构造函数继承的唯一东西将是原型对象上的属性。所以当你将'carName'放在'person.prototype'上时,所有'person'对象都会共享这个函数。如果你在构造函数中做了'this.carName = func ...',那么每个'person'对象将被赋予一个唯一的(尽管是相同的)函数。请记住,在'person'构造函数中,'this'是对正在构造的新对象*的直接引用。我有一种感觉,你可能习惯了另一种语言的OOP。如果是这样,JS可能会非常不同。 – 2012-02-03 04:51:41

相关问题