我试图设置一个变量并将其传递给构造函数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);
});


解决方法是:将属性prototypenew一起使用,方法是将prototype引用复制到该对象(例如,您可以通过在Chrome控制台中运行console.dir(aPerson)来查看需要执行的操作)。 JavaScript首先检查原始对象本身,然后检查原型是否存在功能或属性。这意味着您可以稍后更改参考原型age,并查看反映在原始对象中的更改。另外,您可以在原始对象本身中声明自己的age,并使其覆盖原型。

09-26 16:44