Uncaught SyntaxError:Setter必须只有一个形式参数

时间:2015-11-19 21:53:32

标签: javascript setter

我试图了解JS上的getter和setter,但我似乎无法通过此错误。任何人都可以提供任何有关我为什么会收到此错误的见解吗?

>>> ports = [('COM4', 'Neato Robotics USB Port (COM4)', 'USB VID:PID=2108:780C SNR=XXXX'),
...          ('COM3', 'Intel(R) Active Management Technology - SOL (COM3)', 'PCI\VEN_8086&DEV_9C3D&SUBSYS_05DE1028&REV_04\3&11583659&0&B3'),
...          ('COM1', 'Communications Port (COM1)', 'ACPI\PNP0501\0')]

>>> ports[0]
('COM4', 'Neato Robotics USB Port (COM4)', 'USB VID:PID=2108:780C SNR=XXXX')

>>> ports[0][2]
'USB VID:PID=2108:780C SNR=XXXX'

>>> ports[0][2].split(':')
['USB VID', 'PID=2108', '780C SNR=XXXX']

>>> ports[0][2].split(':')[1]
'PID=2108'

>>> ports[0][2].split(':')[1].split('=')
['PID', '2108']

>>> ports[0][2].split(':')[1].split('=')[1]
'2108'

>>> int(ports[0][2].split(':')[1].split('=')[1])
2108
  

Uncaught SyntaxError:Setter必须只有一个形式参数

3 个答案:

答案 0 :(得分:6)

setter 函数是一个在执行以下操作时隐式调用的函数:

someObject.property = 25;

因为赋值操作涉及分配一个且只有一个值,所以setter函数必须只有一个参数。它只会被一个参数调用(通过隐式赋值机制),所以双参数setter没有意义。

在您的情况下,您可以让您的setter获取单个对象并从中获取两个值:

var book = {
    year: 2004,
    edition:1,
    get newYear(){
        return "Hello, it's " + this.year;
    },
    set newYear(value){
        this.year = value.y;
        this.edition = value.e;
    }
};

然后你可以说

book.newYear = { y: 2005, e: 2 };

(就我个人而言,我认为我更愿意通过解构分配来做到这一点,但它会起作用。)

答案 1 :(得分:6)

当您指定setter表示的值时,将调用setter函数:

var obj = {
  set a(newVal) { console.log("hello"); }
}
obj.a = 1; // will console log "hello"

正如你所看到的那样,setter采用多重参数是没有意义的,但它可以让你在设置值之前自由地操作它:

var person = {
  surname: "John",
  lastname: "Doe",
  get fullname() {
    return this.surname + " " + this.lastname;
  },
  set fullname(fullname) {
    fullname = fullname.split(' ');
    this.surname = fullname[0];
    this.lastname = fullname[1];
  }
};

console.log(person.fullname); // "John Doe"
person.fullname = "Jane Roe";
console.log(person.surname); // "Jane"
console.log(person.lastname); // "Roe"

答案 2 :(得分:0)

尝试使用setNewYear并且不设置newYear,并且getNewYear也不要设置newYear。