2

如何在经典 jscript 中创建一个类?(不是 jscript.net)

而且,如何引用这个类?

我试过了

class someclass {


}

但它不起作用。

4

6 回答 6

6

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

function someclass() {
  this.answer = 42;
}

您可以像使用课程一样使用它:

var obj = new someclass();

要创建方法,您可以向其原型添加函数:

someclass.prototype.getAnswer = function() {
  return this.answer;
}

用法:

var ans = obj.getAnswer();
于 2011-06-18T22:32:59.610 回答
3

没有这样的类,但这里有一个如何获得基本面向对象功能的简单示例。如果这就是您所需要的,那很好,但是如果您追求类的其他特性,例如继承,那么比我更有知识的人将不得不提供帮助。

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();
于 2011-06-18T22:32:35.943 回答
2

最近:


2011年的回答:

你真的没有关于 Javascript 的课程,但你有类似的东西。在 jsFiddle 检查这个例子

var classA = function() {     // declaring a "class"
    this.something = "Text";  // a public class field
};

classA.prototype.b = " b ";   // a class field
classA.c = "c";               // a static field
classA.prototype.d = function(x) { // a public class method
};
classA.e = function(x){     // a public static method
};

var a = new classA();       // instantiate a class

阅读有关 MDC 的更多信息...

于 2011-06-18T22:35:05.480 回答
1

使用类的名称定义一个函数。在其中定义的任何 varthis.whatever都将充当类成员:

function SomeClass() {
  this.a;
  this.b;
}

然后在原型中添加方法:

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-06-18T22:34:17.093 回答
0

请耐心等待,因为我自己只是隐隐约约地掌握了这一点:

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
}
                    });

不幸的是,这非常麻烦。

编辑:

这是一个非常有用的资源:JavaScript“类”

于 2011-06-18T22:32:17.650 回答
0

Jscript (.Net?) 中的类: http ://www.functionx.com/jscript/Lesson05.htm

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
于 2019-08-12T22:54:02.937 回答