我试着去建立一个变量,并essentailly通过它的构造函数像在C#中的javascript,但不似乎喜欢它的匿名类型...为什么直接将构造函数放入变量中?
var aPerson = function Person(){
};
$(document).ready(function(){
Person.prototype.age = 22;
window.alert(aPerson .age);
});
我这样做为什么不能?
我试着去建立一个变量,并essentailly通过它的构造函数像在C#中的javascript,但不似乎喜欢它的匿名类型...为什么直接将构造函数放入变量中?
var aPerson = function Person(){
};
$(document).ready(function(){
Person.prototype.age = 22;
window.alert(aPerson .age);
});
我这样做为什么不能?
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);
});
这里的交易:prototype
与new
通过复制prototype
参考对象一起工作的属性(你可以看到什么是需要在Chrome控制台中运行console.dir(aPerson)
,例如) 。 JavaScript首先检查原始对象本身,然后检查原型以查看函数或属性是否存在。这意味着您可以稍后更改参考原型age
并查看原始对象中反映的更改。此外,您可以在原始对象中声明自己的age
,并覆盖原型。
因为aPerson
没有年龄。您必须致电new
才能使用。
var aPerson = function Person(){
};
$(document).ready(function(){
Person.prototype.age = 22;
bPerson = new Person();
window.alert(bPerson.age);
});
我相当肯定您在使用aPerson
,而不是Person
(外部)来引用你的函数。在内部,你可以使用Person
来引用它。
或者,你可以这样做 -
function Person() {
}
var aPerson = new Person();
$(function() {
Person.prototype.age = 22;
alert(aPerson.age) //22
});
我认为这种接近像在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。
此代码看起来非常熟悉...... – Pat 2011-06-15 14:35:06
可能的重复[为什么不编辑原型工作?](http://stackoverflow.com/questions/6359190/why-doesnt-this-edit-to -a-prototype-work) – 2011-06-15 14:36:54
哦,请不要再问同一个问题两次! – 2011-06-15 14:37:47