gpt4 book ai didi

javascript - 添加除访问器之外的函数的语法是什么?

转载 作者:行者123 更新时间:2023-12-02 14:49:09 26 4
gpt4 key购买 nike

我正在使用 Node.js 学习 JavaScript。我喜欢用工厂创建对象的想法,在阅读了很多关于这个主题的文章后,我选择使用以下代码创建对象:

// ES6 only
'use strict';

// The base object, "object literal" syntax
let animal2 = {
// public member
animalType: 'animal',

// public method
describe() {
return `This is "${this.animalType}"`;
}
};

// factory function which serves 2 purposes:
// - encapsulation, that's where private things are declared thanks to closures
// - the "real" object creation, this prevents to use "new" which is not really Js-ish
let afc = function afc() {
// private member
let priv = "secret from afc";

return Object.create(animal2, {
// Object customisation
animalType: { value: 'animal with create'},

// object extension. The new objects created here get 3 new members:
// - a private member
// - a new property
// - a new method to access the private member

// new public member
color: { value: 'green' },
secret: {
get: function () { return priv; },
set: function (value) { priv = value; },
},
KO1() {
console.log("KO1");
},
KO2: function() {
console.log("KO2");
}
});
}

// creation of an animal instance
let tac = afc();

我的问题是我无法弄清楚添加一个可以操作私有(private)数据而不仅仅是访问器的函数的语法是什么。我在这里放了两个我想到的例子(KOx),但正如它们的名字所暗示的,这种语法导致:“KOx 不是一个函数”。

最佳答案

Object.create 期望属性描述符的对象作为其第二个参数。这就是为什么你必须在任何地方使用 {value: …}{set: …, get: …}

事实上,您必须对方法执行相同的操作 - 这只是一个以函数作为其值的标准属性:


KO3: {value: function() {

}},

但是,当您不需要属性描述符时,我会避免使用它们。 Object.assign更适合:

return Object.assign(Object.create(animal2, {
secret: {
get() { return priv; },
set(value) { priv = value; },
}
}), {
animalType: 'animal with create',
color: 'green',
KO1() {
console.log("KO1");
},
KO2: function() {
console.log("KO2");
}
});

关于javascript - 添加除访问器之外的函数的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36330483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com