前端开发:分享js创建对象的基本应用 - Web前端
作者:98wpeu发布时间:2026-09-01分类:网页前端技术浏览:3

javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象。那么,既然是面象对象的,如何来创建对象呢?
接下来我们一起讨论下JS创建对象的几种方式和对象方法。GOOOO!
工厂模式:
工厂是函数的意思。工厂模式核心是定义一个返回全新对象的函数。
function getObj(name, age) {
let obj = {}
obj.name = name
obj.age = age
return obj
}
let person1 = getObj("cc", 31)缺点:不知道新创建的对象是什么类型
构造函数模式:
通过一个构造函数,得到一个对象实例。
构造函数和工厂模式区别是:
1,构造函数函数体加了this
2,构造函数没有return
3,构造函数调用时,用new关键字
function CreateObj(name, age) {
this.name = name
this.age = age
}
let person1 = new CreateObj("cc", 31)
console.log(person1)
console.log(person1.constructor === CreateObj); // true
console.log(person1 instanceof CreateObj); // true关于构造函数的两个问题:
1,构造函数和普通函数唯一区别是调用方式。构造函数要用new关键字。如果不用new,则是往Global对象上加属性。下面例子中,CreateObj方法,往Window对象上加了name和age属性。
function CreateObj(name, age) {
this.name = name
this.age = age
}
CreateObj('cc', 10)
console.log(window.name) // 'cc'2,构造函数存在的问题: 构造函数体内的方法,每次创建一个实例,都会创建一遍。
person1.sayName( ) === person2.sayName( ) // false
解决方法是,将sayName定义在createObj外面。
function sayName() {
console.log(this.name)
}
function CreatePerson(name, age) {
this.name = name
this.age = age
this.sayName = sayName
}
let person1 = new CreatePerson('joy', 31)
person1.sayName()但是,这样会让自定义类型引用的代码不能很好聚在一起。
原型模式:
原理是,每个函数都有一个PRototype属性。prototype是一个对象,里面定义的属性和方法会被所有实例共享。
关于原型模式,有两个等式:
function Person() { }
let person1 = new Person()
console.log(person1.__proto__ === Person.prototype) // true
console.log(Person.prototype.constructor === Person); // true关于原型对象的三个方法:isPrototype , getPrototypeof,setPrototypeOf, Object.create()。
// isPrototypeOf判断构造函数的原型对象是否是实例的原型对象
function Person() {}
let person1 = new Person()
console.log(Person.prototype.isPrototypeOf(person1)); // true// 获取对象的原型对象
function Person() {}
let person1 = new Person()
console.log(Object.getPrototypeOf(person1) === Person.prototype);// 将某个对象,设为另一个对象的原型对象
let person1 = {name: "cc"}
let person2 = {age: 32}
Object.setPrototypeOf(person1,person2)
console.log(person1.name, person1.age); // cc 32// 以某个对象为原型对象,创建一个新对象
let person1 = {name: "cc"}
let person2 = Object.create(person1)
person2.age = 30
console.log(person2.name, person2.age);当访问一个对象person的name属性时,是按照以下步骤去访问:
1,person上如果有name属性(即便这个属性是null,也会返回Null),返回name属性值;没有,继续去原型对象Person.prototype上找
2,如果原型上有name属性,返回原型上name属性值;没有,则返回undefined
判断一个属性是在实例上,还是在原型上,可以用hasOwnproperty。
function Person() {}
Person.prototype.name = "cc"
let person1 = new Person()
console.log(person1.name) // 'cc'
console.log(person1.hasOwnProperty("name")); // false判断一个对象上是否有个某个属性,用in操作符。
// 对象自身 or 原型上找到,都返回true
function Person() {}
Person.prototype.name = "cc"
let person1 = new Person()
console.log("name" in person1) // true
console.log(person1.hasOwnProperty("name")); // false访问对象的属性的方法:
Object.keys( ) for ... in // 继承属性也会遍历出来 Object.getOwnPropertyNames(obj) // 会列出可枚举和不可枚举属性,其他和 Object.keys( )结果一样 Object.getOwnPropertySymbols(obj) // 和getOwnPropertyNames类似,只是仅针对symbol reflect.ownKeys(obj) // 和Object.keys( )结果一样
其他访问对象属性和属性值的方法:
Object.values( ) 对象值组成的数组,会省掉Symbol型。
Object.entries( ) 对象键值对组成的数组,会将键,转化成字符串,省掉Symbol型。
function Person() {}
Person.prototype.name = "cc"
let person = new Person()
person.age = 21
let sy = Symbol('sy')
person[sy] = 'smile'
console.log(Object.values(person)) // [ 21 ]
console.log(Object.entrIEs(person)) // [ [ 'age', 21 ] ]看完以上内容,您学会了吗?
相关推荐
- 迁移网站入坑mysql的问题:mysql无法启动、无法备份卸载以及无法同步网站数据 - Web前端
- SEO优化:聊聊页面中rel =“canonical”和og:url标签属性 - Web前端
- 学习如何定义函数:普通函数和箭头函数的基础应用以及区别 - Web前端
- js中的new有什么作用呢?简单实例来说明下 - Web前端
- Windows 与 Android 设备连接起来?微软刚刚更新了你的手机应用 - Web前端
- 聊聊页面滚动条在vue和H5项目里修改滚动条样式的应用 - Web前端
- 自从Google更改了rel = nofollow属性的处理方式后,我们应该如何去应对? - Web前端
- vue3响应式功能:如何用setup+ref+reactive实现 - Web前端
- 谷歌adsense:匹配内容单元将仅展示广告,并更名为“多重广告” - Web前端
- Mozilla 终止对 Firefox Lockwise 密码管理应用程序的支持,使 iOS 用户陷入困境 - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 4【第六章】Foundation之按钮和下拉功能 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6jQuery编写widget的一些技巧分享 - Web前端
- 7分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 8在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 9jQuery实现鼠标移到元素上动态提示消息框效果 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


