javascript中的对象是如何创建和使用的?【教程】
技术百科
夢幻星辰
发布时间:2026-01-27
浏览: 次 JavaScript对象本质是键值对集合,继承自Object.prototype;字面量创建简洁但存在引用陷阱和this绑定时机问题;构造函数需用new避免全局污染;Object.create()可显式控制原型链;ES6 class仅为语法糖。
JavaScript 中的对象不是靠“定义类”再实例化出来的,而是直接通过字面量、构造函数或 Object.create() 等方式生成——本质是键值对的集合,且所有对象都继承自 Object.prototype。
用字面量创建对象最常用,但要注意引用陷阱
字面量写法简洁:{ name: "Alice", age: 30 }。它适合一次性配置、参数传递、返回简单结构数据。
- 多个变量引用同一字面量对象时,修改一个会影响所有——因为它们指向内存中同一个地址
- 对象字面量中的方法不能访问“尚未声明”的同级属性(
this在运行时才绑定,不是声明时) - 如果属性名含空格或特殊字符,必须用引号包裹:
{"full name": "Bob"},取值只能用方括号:obj["full name"]
new Object() 和构造函数的区别不只是写法问题
new Object() 几乎等价于字面量,但更冗长;真正关键的是自定义构造函数,比如:
function Person(name, age) {
this.name = name;
this.age = age;
this.say = function() { return `I'm ${this.name}`; };
}
用 new Person("Tom", 25) 创建实例后:
- 每个实例都会重复创建
say函数,浪费内存——应把方法挂到Person.prototype上 - 忘记写
new会导致this指向全局(非严格模式下),污染全局作用域 - ES6 的
class只是语法糖,底层仍基于原型链,不改变对象创建的本质逻辑
用 Object.create() 显式控制原型链
当你需要精确指定新对象的原型(而不是默认 Object.prototype),就该用 Object.create():
const animal = { eats: true };
const rabbit = Object.
create(animal);
rabbit.jumps = true;
这时 rabbit 的原型是 animal,rabbit.eats 能读取成功,但 rabbit.constructor 会指向 Object,不是 animal。
-
Object.create(null)创建“无原型”对象,常用于哈希表场景,避免hasOwnProperty等方法被意外覆盖 - 第二个参数可传入属性描述符对象,实现不可枚举、只读等控制,比字面量更精细
- 不要用它替代字面量来建普通数据对象——过度设计,且可读性下降
对象的“动态性”是双刃剑:可以随时增删属性,但也意味着类型不可靠、IDE 推导弱、容易拼错键名。现代项目中,往往配合 TypeScript 或运行时校验(如 zod)来约束结构,而不是依赖纯 JS 的自由创建方式。
# js
# javascript
# java
# class
# 区别
# 构造函数
# 键值对
# NULL
# 继承
# 作用域
# Object
# es6
# typescript
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11如何设置ipv6 Win11开启IPv6
- 如何在 Go 中创建包含映射(map)的切片(sl
- Drupal 中渲染节点时出现 HTML 标签嵌套
- Python深度学习实战教程_神经网络模型构建与训
- Django 密码修改后会话失效的解决方案
- Windows10任务栏图标变成白色文件_Win1
- 如何使用Golang管理跨项目依赖_Golang多
- Windows系统被恶意软件破坏后的恢复策略_错误
- C++ STL算法库怎么用?C++常用算法函数(s
- Win11怎么更改文件夹图标_自定义Win11文件
- Win11怎么关闭防火墙通知_屏蔽Win11安全中
- 如何在Golang中验证模块完整性_Golangg
- windows 10专注助手怎么关闭_window
- Python与Docker容器化部署实战_镜像构建
- php本地部署后session无法保存_sessi
- Windows10电脑怎么设置防火墙出站规则_Wi
- Win11怎么连接蓝牙耳机_Win11蓝牙设备配对
- 如何用正则与预处理高效拦截带干扰符的恶意域名
- 如何在Golang中使用log包输出不同级别日志_
- Python安全爬虫设计_IP代理池与验证码识别策
- 如何使用Golang sync.Map实现并发安全
- Linux怎么查找死循环进程_Linux系统负载分
- Win11怎么更改鼠标指针_Windows 11自
- Win11怎么设置默认图片查看器_Windows1
- Windows怎样拦截WPS弹窗广告_Window
- 如何在 Go 开发中正确处理本地包导入与远程模块路
- 如何使用Golang实现云原生应用弹性伸缩_自动应
- Win11怎么设置ip地址_Windows 11手
- 如何使用Golang管理模块版本_Golanggo
- XAMPP 启动失败(Apache 突然停止)的终
- Win11怎么关闭SmartScreen_禁用Wi
- Win11 explorer.exe频繁崩溃_修复
- mac怎么打开终端_MAC终端Terminal使用
- 如何用::实现单例模式_php静态方法与作用域操作
- Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数
- Python高性能计算项目教程_NumPyCyth
- Win11怎么关闭系统透明度_Windows11个
- Win11怎么设置默认PDF阅读器 Win11修改
- 如何在 ACF 中正确更新嵌套多层的 Group
- Win11讲述人怎么关闭_Win11误触开启语音朗
- Win11怎么恢复误删照片_Win11数据恢复工具
- Go语言中CookieJar的持久化机制解析:内存
- php怎么下载安装后无法解析php文件_服务器配置
- php怎么下载安装后设置错误日志_phpini l
- Windows10如何查看蓝屏日志_Win10使用
- c++怎么用jemalloc c++替换默认内存分
- php文件怎么变mp4保存_php输出视频流保存为
- php打包exe怎么传递参数_命令行参数接收方法【
- GML (Geography Markup Lan
- php在Linux怎么部署_LNMP环境搭建PHP


QQ客服