我试图设置一个变量并将其构造函数essentailly传递给c#中的匿名类型,但javascript似乎不喜欢它......
var aPerson = function Person(){
};
$(document).ready(function(){
Person.prototype.age = 22;
window.alert(aPerson .age);
});
为什么我不能这样做?
答案 0 :(得分:2)
我非常肯定您必须使用aPerson
而不是Person
(外部)来引用您的功能。在内部,您可以使用Person
来引用它。
或者,您可以这样做 -
function Person() {
}
var aPerson = new Person();
$(function() {
Person.prototype.age = 22;
alert(aPerson.age) //22
});
答案 1 :(得分: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);
});
以下是此交易:通过将prototype
引用复制到对象,属性new
与prototype
一起工作(您可以通过在Chrome中运行console.dir(aPerson)
来了解相关内容控制台,例如)。 JavaScript首先检查原始对象本身,然后检查原型以查看函数或属性是否存在。这意味着您可以稍后更改参考原型age
并查看原始对象中反映的更改。此外,您可以在原始对象中声明自己的age
,并覆盖原型。
答案 2 :(得分:0)
因为aPerson
没有年龄。您必须致电new
才能使其正常工作。
var aPerson = function Person(){
};
$(document).ready(function(){
Person.prototype.age = 22;
bPerson = new Person();
window.alert(bPerson.age);
});