Javascript 如何在classic jscript中创建类?

Javascript 如何在classic jscript中创建类?,javascript,jscript,Javascript,Jscript,如何在classic jscript中创建类?(不是jscript.net) 那么,如何引用这个类呢 我试过了 class someclass { } 但它不起作用。请容忍我,因为我自己只是隐约明白这一点: Javascript没有类。它有对象。要复制一个类,您需要创建一个对象。要创建该“类”的“实例”,需要复制该对象。有几种方法可以做到这一点。一种是创建一个返回对象的函数,然后调用该函数,如下所示: function Car(brand, year) { return { brand:

如何在classic jscript中创建类?(不是jscript.net)

那么,如何引用这个类呢

我试过了

class someclass {


}

但它不起作用。

请容忍我,因为我自己只是隐约明白这一点:

Javascript没有类。它有对象。要复制一个类,您需要创建一个对象。要创建该“类”的“实例”,需要复制该对象。有几种方法可以做到这一点。一种是创建一个返回对象的函数,然后调用该函数,如下所示:

function Car(brand, year) {
return {
brand: brand,
year: year
}
}
var modelT = Car("Ford", 1900); //or whenever the model T came out
modelT.brand == "Ford" //true
modelT.year == 1900; //true 
另一种方法是创建一个作为函数的对象,并创建该对象的“新”。问题是你必须使用
new
,这是相当误导的

var Car = function(make, year) {
    this.make = make;
    this.year = year;
};
var x =  new Car("ford", 1990);
//same tests hold true from earlier example
在我看来,最好的方法是使用
Object.create
,因为它最能代表实际发生的事情:

var Car = (function() {
    var self = Object.create({}, {
        make: {
value: "Ford"
}
year: {
value: 1900
}
    });
    return self;
})();
var modelT = Object.create(Car, {
                        make: {
                            value: "Model T"
                        },
year: {
value: 1901
}
                    });
不幸的是,这非常麻烦

编辑:
这是一个非常有用的资源:

没有这样的类,但这里有一个简单的示例,说明如何获得基本的面向对象功能。如果这就是您所需要的,很好,但是如果您想要类的其他特性,例如继承,那么必须有比我更了解的人来帮助您

function SomeClass(n) {
    this.some_property = n;
    this.some_method = function() {
        WScript.Echo(this.some_property);
    };
}

var foo = new SomeClass(3);
var bar = new SomeClass(4);
foo.some_method();
bar.some_property += 2;
bar.some_method();

jscript中没有类。您可以创建对象构造函数:

function someclass() {
  this.answer = 42;
}
你可以像上课一样使用它:

var obj = new someclass();
要生成方法,请向其原型中添加函数:

someclass.prototype.getAnswer = function() {
  return this.answer;
}
SomeClass.prototype.methodA = function() {
  this.a++;
}

SomeClass.prototype.methodB = function() {
  this.b++;
}
用法:

var ans = obj.getAnswer();

使用类的名称定义函数。其中定义为
的任何var。任何
都将作为类成员:

function SomeClass() {
  this.a;
  this.b;
}
然后向原型添加方法:

someclass.prototype.getAnswer = function() {
  return this.answer;
}
SomeClass.prototype.methodA = function() {
  this.a++;
}

SomeClass.prototype.methodB = function() {
  this.b++;
}
我相信您也可以像这样在构造函数中定义方法,但我已经很久没有使用这种语法了

function SomeClass {
   this.a = 0;

   // Method definition
   this.methodA = function() {
      this.a++;
   }
}
最近:


2011年的答复:

你没有真正的Javascript类,但你有类似的东西

Jscript(.Net?)中的类:

Powershell支持它(以及VisualBasic,甚至F#)。现在我看到的问题是,不在.net中。但为我辩护,我在谷歌上搜索jscript类,这就是我登陆的地方

Add-Type @'
class FRectangle {
  var Length : double;
  var Height : double;
  function Perimeter() : double {
      return (Length + Height) * 2; }
  function Area() : double {
      return Length * Height;  } }
'@ -Language JScript


[frectangle]::new()


Length Height
------ ------
     0      0

Javascript没有类。你不需要它们。你到底想做什么?你应该读到它不是javascript,而是JScript JScript是微软ECMAScript的实现。JavaScript最初是由Netscape开发的,由Microsoft改编为JScript。后来,JavaScript被标准化为ECMAScript。也许下面的答案对你有用:@Felix Kling在你发表评论之前已经注意到我的错误,并已修复。谢谢,不太清楚。不过,“警报”功能不起作用。这让我想将其标记为非常低quality@magallanes它不起作用,因为函数中的
这个
不是指“class”@Felix和其他人-我希望一个简单的例子足够清楚。至少,我个人更喜欢从这些例子中学习。@magellanes:虽然“警报”功能不起作用->您没有在浏览器上下文(例如wsh)中运行此功能?是的,但jscript与javascript类似,但(感谢Microsoft)不是javascript_@magallanes是的,但是相同的原则和大部分相同的语法(除了
Object.create
)仍然适用。“公共类字段”、“类字段”和“静态字段”之间有什么区别?方法也一样?如果您能添加示例,我将不胜感激。@Foad我的答案是从2011年开始的,以后请不要使用它,请看这个:嗯