0

我很困惑我应该在哪里使用原型来声明一个方法?我读到的是,如果我创建一个由原型声明的方法,所有实例都使用相同的引用,那么它是静态的还是不同的?因为我可以在原型方法中访问实例属性?但是在c#中,你不能在静态方法中访问类变量(不是静态的)吗?

一个例子:

function Calculator()
{
     if(this === window){
          return new Calculator();
     }

     this.Bar = "Instance Variable";
}

Calculator.prototype.SaySomething = function(thing){
     return thing + " " + Bar;
}


Calculator().SaySomething("Test"); // Test Instance Variable
4

3 回答 3

2

prototype的工作与new关键字一起使用。举个例子:

function Calculator(bar) {
     this.Bar = bar;
}

Calculator.prototype.SaySomething = function(thing){
     return thing + " " + this.Bar;
}

var calInstance = new Calendar("Instance Variable");
calInstance.SaySomething("Test");
于 2012-08-20T00:21:31.950 回答
1

您正确地声明了原型方法,但错误地调用了它。Calculator不是静态对象,只是一个类,因此您只能在创建对象的实例时调用它的方法。

var calc = new Calculator();
calc.SaySomething('thing');
//this would return "thing Instance Variable"

简而言之,Javascript 不使用类和实例方法,只使用实例方法。

于 2012-08-20T00:22:29.737 回答
1

我建议您阅读Douglas Crockford的 JS The Good Parts。它将让您更好地理解 JS 的原型对象模型。

于 2012-08-20T00:22:30.443 回答