2011-06-15 36 views
0

我试着去建立一个变量,并essentailly通过它的构造函数像在C#中的javascript,但不似乎喜欢它的匿名类型...为什么直接将构造函数放入变量中?

var aPerson = function Person(){ 

}; 


$(document).ready(function(){ 

    Person.prototype.age = 22; 

    window.alert(aPerson .age); 

}); 

我这样做为什么不能?

+3

此代码看起来非常熟悉...... – Pat 2011-06-15 14:35:06

+1

可能的重复[为什么不编辑原型工作?](http://stackoverflow.com/questions/6359190/why-doesnt-this-edit-to -a-prototype-work) – 2011-06-15 14:36:54

+1

哦,请不要再问同一个问题两次! – 2011-06-15 14:37:47

回答

2

Person只声明为aPerson变量的一部分,但它需要显式地(例如,function Person(){})定义它可以用于原型继承之前。你需要这样的东西更多:

// Create a Person function object 
function Person() { 

}; 

// Modify that function's prototype 
Person.prototype.age = 22; 

$(document).ready(function() { 
    // aPerson.__proto__ = Person.prototype 
    var aPerson = new Person(); 

    // JS checks whether aPerson has age already set, if not, it checks 
    // aPerson's prototype -- in which case it's given the value 22 
    alert(aPerson.age); 
}); 

这里的交易:prototypenew通过复制prototype参考对象一起工作的属性(你可以看到什么是需要在Chrome控制台中运行console.dir(aPerson),例如) 。 JavaScript首先检查原始对象本身,然后检查原型以查看函数或属性是否存在。这意味着您可以稍后更改参考原型age并查看原始对象中反映的更改。此外,您可以在原始对象中声明自己的age,并覆盖原型。

0

因为aPerson没有年龄。您必须致电new才能使用。

var aPerson = function Person(){ 

}; 


$(document).ready(function(){ 

    Person.prototype.age = 22; 
    bPerson = new Person(); 


    window.alert(bPerson.age); 

}); 
+0

,但是ive添加年龄到人类的原型并不是意味着所有的物体都会变老? – Exitos 2011-06-15 14:32:37

+1

请注意'bPerson'是一个全局变量。 – 2011-06-15 14:36:28

+0

这不起作用,因为['Person'没有被定义](http://jsfiddle.net/brymck/RkeCS/1/)。 – brymck 2011-06-15 14:37:50

2

我相当肯定您在使用aPerson,而不是Person(外部)来引用你的函数。在内部,你可以使用Person来引用它。

或者,你可以这样做 -

function Person() { 

} 

var aPerson = new Person(); 

$(function() { 
    Person.prototype.age = 22; 
    alert(aPerson.age) //22 
}); 
0

我认为这种接近像在C#“匿名类型”(包封一组只读属性到一个单一的对象,而不必显式地定义类型第一):

var person = (function(){ 
    var age=22; 

    function getAge(){ 
     return age; 
    } 
    return {age: getAge} 
}()); 

alert(person.age()); //=> 22 

此外JavaScript的是dynamically typed,所以它不知道/使用类型,就像你在C#中习惯的那样。换句话说,在JavaScript中,你不必输入你指定的变量。类型检查是在运行时完成的。我不认为在JS中模仿c#或其他语言是有用的。花点时间多了解一下它,你会发现它是一个不同的范例。一如既往,我建议道格拉斯克罗克福德的javascript pages

相关问题