为什么将构造函数直接放入变量?

时间:2011-06-15 14:28:25

标签: javascript

我试图设置一个变量并将其构造函数essentailly传递给c#中的匿名类型,但javascript似乎不喜欢它......

var aPerson = function Person(){

};


$(document).ready(function(){

  Person.prototype.age = 22;

  window.alert(aPerson .age);

});

为什么我不能这样做?

3 个答案:

答案 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引用复制到对象,属性newprototype一起工作(您可以通过在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);

});