我试图设置一个变量并将其传递给构造函数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
,并使其覆盖原型。