将java代码移植到javascript

时间:2016-11-09 20:42:34

标签: javascript java

我有一个Java类构造函数,其中一部分允许我在实例化时设置变量'key':

public class Note
{
    private int key;

    public Note()
    {
        setKey(1 + (int)(Math.random() * 13D));
    }

    public void setKey(int i)
    {
        key = (i > 0) & (i <= 13) ? i : 0;
    }
}

我想用javascript重写代码,这样我就可以在没有java运行时环境的网页上使用它。我试过了:

var Note = function() {
    pitch : setKey( Math.floor(Math.random() * 13) + 1); 
}

function setKey(i) {
    var key = (i > 0) & (i <= 13) ? i : 0;
    console.log("Here key is: " + key); // prints a number
    return key;
}

var note1 = new Note(); 
console.log( note1.pitch); // THIS PRINTS UNDEFINED

关于初始化变量'pitch',我怎么没理解?

非常感谢您的帮助。 杰拉德

2 个答案:

答案 0 :(得分:0)

这是一个label,而不是一个属性。

&#13;
&#13;
var Note = function() {
    this.pitch = setKey( Math.floor(Math.random() * 13) + 1); 
};

function setKey(i) {
    var key = (i > 0) & (i <= 13) ? i : 0;
    console.log("Here key is: " + key); // prints a number
    return key;
}

var note1 = new Note(); 
console.log( note1.pitch); // THIS PRINTS UNDEFINED
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如何在不使用ES6功能的情况下执行POO:

&#13;
&#13;
function Note() {
    // constructor
    this.pitch = this.setKey(Math.floor(Math.random() * 13) + 1);
}
    
Note.prototype.setKey = function(i) {
    return (i > 0) & (i <= 13) ? i : 0;
}
    
var note = new Note();
console.log(note.pitch);
&#13;
&#13;
&#13;

如果您想使用ES6功能(例如使用预编译器,如babel):

&#13;
&#13;
class Note {
    constructor() {
        this.pitch = this.setKey(Math.floor(Math.random() * 13) + 1);
    }
    
    setKey(i) {
        return (i > 0) & (i <= 13) ? i : 0;
    }
}

let note = new Note();
console.log(note.pitch);
&#13;
&#13;
&#13;