javascript中属性存放位置取决于定义方式:实例属性(this.xxx或动态添加)独立存在各实例上,确保互不影响;原型属性(prototype上定义)被所有实例共享,节省内存但引用类型需谨慎初始化。

JavaScript 中对象实例的属性,不是全存在实例自己身上,也不是全挂在原型上——关键看怎么定义、怎么用。属性存放位置直接影响可变性、内存占用和行为一致性。
哪些属性该放实例上?
需要每个对象独立拥有、互不影响的属性,必须定义在实例内部。
- 构造函数中用 this.xxx = value 赋值的,都存在实例自身,比如
this.name = 'Alice'、this.id = Date.now() - 后续动态添加的属性,如
obj.status = 'active',也直接落在实例上 - 这类属性修改不会影响其他实例,删除后也不会从原型“冒出来”
哪些方法或属性该放原型上?
所有实例共用、逻辑不变的功能,应统一放在构造函数的 prototype 上。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如
Person.prototype.sayHello = function() { ... },这样创建一百个Person实例,sayHello函数只在内存中存一份 - 如果误把方法写在构造函数里(
this.sayHello = function() {...}),每次 new 都新建一个函数,浪费内存且obj1.sayHello !== obj2.sayHello - 共享属性(如默认配置)也可放原型,但要小心:若属性是对象或数组,所有实例会共享同一份引用,可能引发意外修改
读取时怎么找属性?
访问 obj.prop 时,引擎按固定顺序查找:
- 先查
obj自身有没有prop - 没有就查
obj.__proto__(即构造函数的prototype) - 还没找到,继续查
obj.__proto__.__proto__,直到Object.prototype - 最终找不到且链到
null,返回undefined
怎么判断属性在哪?
可以用两个简单方法区分来源:
-
obj.hasOwnProperty('prop')→ 返回 true 表示在实例自身 -
'prop' in obj→ 返回 true 表示在实例或其原型链任意位置 - 配合
console.dir(obj)查看展开结构,自有属性会显示在第一层,灰色或带__proto__标记的是继承来的
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










