【问题标题】:how to create a class in classic jscript?如何在经典 jscript 中创建一个类?
【发布时间】:2011-09-17 23:01:16
【问题描述】:

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

还有,如何引用这个类?

我试过了

class someclass {


}

但它不起作用。

【问题讨论】:

标签: javascript jscript


【解决方案1】:

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

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

你把它当作一个类来使用:

var obj = new someclass();

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

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

用法:

var ans = obj.getAnswer();

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不是真的,很清楚。但是,“警报”功能不起作用。
    • 这让我想将其标记为质量非常低
    • @magallanes 它不起作用,因为函数内部的this 不是指“类”
    • @Felix 和其他人-我希望一个简单的例子足够清楚。至少,我个人经常更喜欢从这样的例子中学习。
    • @magellanes:虽然,“警报”功能不起作用 -> 你没有在浏览器上下文中运行它(例如 wsh)?
    【解决方案3】:

    最近的:


    2011 年的回答:

    您实际上没有关于 Javascript 的课程,但您有类似的东西。 Check this example on 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
    

    Read more on MDC...

    【讨论】:

    • “公共类字段”、“类字段”和“静态字段”有什么区别?方法一样吗?如果您能添加示例,将不胜感激。
    • @Foad 我的回答是从 2011 年开始的,以后请不要使用它,而是看到这个:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    • 嗯 ?,我认为这不适用于 JScript 经典。
    【解决方案4】:

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

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

    【讨论】:

    • @Felix Kling 在您发表评论之前已经注意到我的错误并已修复。谢谢。`
    【解决方案5】:

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

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

    不幸的是,这非常麻烦。

    编辑:

    这是一个非常有用的资源:@​​987654321@

    【讨论】:

    • 是的,但是 jscript 类似于 javascript 但(感谢 Microsoft)不是 javascript。 _
    • @magallanes 是的,但相同的原则和大部分相同的语法(Object.create 除外)仍然适用。
    【解决方案6】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多