JS 中的构造函数和类
最编程
2024-07-17 19:31:10
...
JS 中的构造函数和类
构造函数:即函数返回值是对象
按基础知识正常语法写是
function Person(name, age) {
name = name || '匿名'
age = age || 0
const obj = {
name: name,
age: age
}
return obj
}
可简化为
function Person(name = '匿名', age = 0) {
return { name, age }
}
当我们调用这个函数创建一个对象时
我们一般说f时Person对象
也就是f是由Person构造函数构造出来的对象const f = Person('fang', 18) console.log(f)
接下来给构造函数增加隐藏属性
function Person(name = '匿名', age = 0) {
const obj = Object.create(Person.共有属性);
obj.name = name
obj.age = age
return obj
}
Person.共有属性 = {
sayHi() {
console.log(`你好,我是 ${this.name}`)
},
run() {
console.log(`${this.name} 在跑步`)
}
}
注意这里我们Person虽然是函数 但函数就是特殊形式的对象 所以可以直接在Person函数加上key(共有属性) 这里
const obj = Object.create(Person.共有属性);
其实就相当于obj = {prototype: Person.共有属性}
构造函数的标准写法
function Person(name = '匿名', age = 0) {
this.name = name
this.age = age
}
Person.prototype = {
constructor: Person,
sayHi() {
console.log(`你好,我是 ${this.name}`)
},
run() {
console.log(`${this.name} 在跑步`)
}
}
相应的变化:
- 1.直接免去了创建obj的过程,直接使用this
- 2.在调用函数的时候加new
- 3.不需要再创建共有属性,以及不需要关联隐藏属性与共有属性的关系
- 4.浏览器在创建构造函数的时候就写好了 xx.共有属性
用new的好处
- 1.1. new会帮你创建好一个新对象
- 2.2. new会帮你准备Person.共有属性
- 3.3. new会帮你关联隐藏属性与共有属性(即直接调用Person.prototype即可)
- 4.new会帮你return新对象
箭头函数不能当作构造函数(不支持this,不支持prototype)(箭头函数把this作为普通变量 不支持this的特殊逻辑)
以及最终最终最终还是会比较经常使用class写法 ????
class Person {
constructor(name = '匿名', age = 0) {
this.name = name
this.age = age
}
sayHi() {
console.log(`你好,我是 ${this.name}`)
}
run() {
console.log(`${this.name} 在跑步`)
}
}
constructor里面就是自有属性
后面函数都是共有属性 可以在prototype中找得到
class与js构造函数写法的小点
- 1.class写法不能在共有属性中有非函数类型 而js写法就可以在共有属性中加入非函数类型
- 2.class写法不推荐直接给Person函数增加一个属性
不要将构造函数写法和 class 写法进行对比分别掌握即可
上一篇: 深入了解 JS 原型、原型链
推荐阅读
-
C++ 中的抽象类和抽象方法
-
通过 Vue 中的 v-bind 增强样式控制--(通过 v-bind 操作类和操作样式属性的详细说明,附示例和代码)
-
玩转JS函数式编程_013] 4.1 JavaScript纯函数相关概念(中4.1 JavaScript 纯函数相关概念(中):函数副作用的几种具体表现
-
C++ 学习笔记 ----8, 掌握类和对象 (II) ---- 更多关于成员函数的知识 (2)
-
解释 JavaScript 中函数的实参和形参
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
解析Python中的类的方法和概念
-
在js中实现大顶堆和小顶堆的操作(javascript)
-
比较与使用:fftshift和ifftshift函数在matlab中的不同
-
移位操作函数的应用:circshift、fftshift和ifftshift在matlab中的用法