Java有Object类。为了类似的目的,Javascript中有哪些类?

时间:2016-07-02 10:04:27

标签: javascript oop

这是一个场景。我有一个名为business and business的类,有一个像food,娱乐等的域。商业类有id,name和域名引用等属性。我将创建不同的域类,如食品,娱乐和服装。每个域类都有自己的属性(很少有可能是常见的)。 如果它是Java,我可以简单地使用Object类或一些接口,这将允许我在运行时提供任何这些类型的引用。 但我不知道如何在Javascript中实现这一点。在这方面,任何帮助都将受到赞赏。

4 个答案:

答案 0 :(得分:1)

如果你的意思是你将使用什么类型的变量引用这些类的实例,答案是:无,JavaScript是一种松散类型的语言。您只需使用变量/函数参数/属性包含的内容:

function Foo() {
    this.name = "foo";
}

function Bar() {
    this.name = "bar";
}

function Bingo() {
    this.name = "bingo";
}

function use(x) { // <== No type on `x`
    console.log(x.name);
}

use(new Foo());
use(new Bar());
use(new Bingo());

或使用ES2015 +

class Foo {
    constructor() {
        this.name = "foo";
    }
}

class Bar {
    constructor() {
        this.name = "bar";
    }
}

class Bingo {
    constructor() {
        this.name = "bingo";
    }
}

function use(x) { // <== No type on `x`
    console.log(x.name);
}

use(new Foo());
use(new Bar());
use(new Bingo());

答案 1 :(得分:0)

Javascript中不需要单独的变量类型。与Javascript(和令人敬畏的)

相比,Java非常不同
var a = 10;
var b = "PieChuckerr Here!"
var isMale = true;
var countriesLivedIn = ['US', 'UK', 10, 12]; // country_code as well as name
var doCall = function(){}
var obj = {
  eyecolor: "blue",
  age: 30
}

检查此示例Varible可以保存任何数据类型。

答案 2 :(得分:0)

如果您来自Java,这里有一个从Java迁移到JavaScript的例子

Java代码:

public class Cellule { 

    // properties
    private String name = ""; 
    private Owner owner = null; 

    // constructor 
    public Cellule(String name){ 
        this.setName(name); 
    } 

    // méthods --> setter and getter 
    public String getName() { 
        return name; 
    } 

    public void setName(String name) { 
        this.name = name; 
    } 

    public Owner getOwner() { 
        return owner; 
    } 

    public void setOwner(Owner owner) { 
        this.owner = owner; 
    } 
} 

public class Owner  
{ 
    // properties
    private ArrayList<Cellule> cellules; 

    // constructor 
    public Owner(){ 
        this.cellules = new ArrayList<Cellule>(); 
    } 

    // methods 
    public int getSize(){ 
        return this.cellules.size(); 
    } 

    public int addElement(Cellule e){ 
        if(e.getOwner() != this)  
            e.setOwner(this); 
        this.cellules.add(e); 
        return this.cellules.indexOf(e); 
    } 

    public Cellule getElementAtIndex(int index){ 
        return this.cellules.get(index); 
    } 
}

用于执行相同操作的JavaScript(ES6)代码:

class Cellule {  
    constructor(name){  
        // properties 
        this.name = name; 
        this.owner = null; 
    }  
} 

class Owner{ 
    constructor(){  
        // properties 
        this.cellules = []; 
    } 

    // methods 
    getSize(){ 
       return this.cellules.length; 
    } 

    addElement(cellule){ 
        if(cellule.owner != this)  
            cellule.owner = this; 
        return this.cellules.push(cellule); 
    } 

    getElementAtIndex(index){ 
        return this.cellules[index]; 
    } 
}

答案 3 :(得分:0)

请注意,您不能使用ES6语法创建私有成员(属性或方法),但您可以使用ES5语法,如下所示:

var MyClass = function() {
    var _name = "John"; // private property

    this.getName = function() { // public method
        return _name; // which returns the private property
    }
};