JavaScript var vs类

时间:2019-07-05 03:43:53

标签: javascript class oop syntax var

考虑变量和类是完全不同的事情,这听起来可能很奇怪,但是我来自Java背景(目前是副学士学位,三年级大学生),而且我一直在阅读javascript和观看视频

有关js动画的视频以创建vector对象的简介开始。他在自己的名为vector的文件中定义了vector.js,并将其用作基本2d动画中粒子运动的基础。

代码如下:

var vector = {
    _x: 1,
    _y: 0,

    create: function(x, y) {
        var obj = Object.create(this);
        obj.setX(x);
        obj.setY(y);
        return obj;
    },

    setX: function(value) {
        this._x = value;
    },
    getX: function() {
        return this._x;
    },

它继续提供更多用于角度,长度等的getter和setter方法。还定义了其他矢量运算的方法,例如叉和点积。

我的问题是: -这与将类与方法一起使用有何不同? -这是可接受/标准的代码吗? -语法foo: function(args)与标头function foo(args)是否相同? -大家都可以向我介绍解释在看似已声明的变量中包含函数和参数的概念的资源吗?

我尝试查找有关的信息,但是我不知道此语法或用法在js中是否有名称。我在Java中还没有看到这样的东西。我找不到任何信息。

干杯。

1 个答案:

答案 0 :(得分:2)

那不是一堂课。那是一个对象。在Java中,它就像一个匿名类。因此,Java实际上确实具有此完全相同的功能,但语法不同。在Java中,将是这样的:

Object vector = new Object {
    private Integer x = 0;
    private Integer y = 0;

    // rest of code ... 
}

一个主要区别是,与Java不同,当您访问不存在的对象的属性时,javascript不会产生错误。上面的代码将是Java中的语法错误,因为Object类没有成员xy。但是javascript会默默地添加不存在的成员:

class Foo {
    constructor () {
        this.a = 1;
    }
}

var foo = new Foo();
console.log(foo.a); // prints 1
console.log(foo.b); // prints "undefined"
foo.b = 2;          // NOT an error
console.log(foo.b); // prints 2

在javascript中,语法{}等效于new Object()。这称为object literal语法(从技术上讲,它被指定为“对象初始化程序”)。实际上,这是JSON的起源-它基于javascript对象和数组语法。

JavaScript中对象的这种行为意味着,它通常用于代替其他语言中的hash / maps / hashmaps / associative数组。因为它的字面表现就像一个关联数组。因此,在Java中的JavaScript中,Map会使用{}