作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题:
var Person = makeClass( // Make a class with 2 instance methods which are initialize and say
{
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + " says: " + message;
}
}
);
在
documentation of the @lends tag of jsdoc ,我发现他们正在使用一个辅助函数,他们说它可以接受一个对象文字并从该对象的成员创建一个类。在上面的例子中,
makeClass
函数创建一个
Person
类,它们有 2 个实例方法(或者它们也可以是静态方法),它们是
initialize
和
say
.我想知道我们是如何创建这种功能的。
makeClass
功能。
makeClass
这样的函数有用与否。
最佳答案
首先,您可以查看 MDN docs on classes .在那里你会找到一些重要的信息:
Classes are in fact just "special functions"
Just as you can define function expressions ... you can define class expressions
const makeFunction = function(valToAdd) {
return function(val) {
return val + valToAdd;
}
}
const addTwo = makeFunction(2);
addTwo(2) // 4
现在,翻译
makeFunction
进入
makeClass
希望更直接一点。范式是相同的,但我们必须做更多的工作来创建实例方法:
const makeClass = function(obj) {
// Anonymous class expression
const dynamicClass = class {};
// Define properties on our class
for (const [name, value] of Object.entries(obj)) {
// Notice we define properties on the prototype so instances of the class can access them
Object.defineProperty(dynamicClass.prototype, name, {
value,
writable: true,
configurable: true
})
}
return dynamicClass;
}
// Create a Person class with methods `initialize` and `say`
const Person = makeClass({
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + " says: " + message;
}
})
// Create an instance
const person = new Person()
person.initialize("Sam")
person.say("Hello!") // Sam says: Hello!
并回答您的一些具体问题:
I also want to know if this kind of creating class way is strange or not, or you can think the kind of function like makeClass is useful or not.
I want to ... understand the @lends tag of JSDoc.
makeClass
创建实例方法(它本质上是复制它们),
JSDoc
不了解创建的类可以使用哪些方法。所以这现在应该是有意义的(来自
JSDoc
文档):
The
@lends
tag tells JSDoc that all the member names of that object literal are being "loaned" to a variable namedPerson
.
Person
变量是我们的类,用
@lends
注释对象文字告诉
JSDoc
我们正在“借出”
initialize
和
say
它的成员。
关于javascript - 创建一个接受对象字面量的函数并从该对象的成员创建一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68356205/
1.字面常量 (1)字面意思是啥就是啥,看其表示就可以知道其值和类型。 (2)有值无名,一用来初始化变量,与一种字符相关联。 #include <stdio.h>int main()
我是一名优秀的程序员,十分优秀!