js-构造函数&原型的方法
构造函数
1 function Rectangle(w, h){ 2 this.width = w; 3 this.height = h; 4 }
1 // 定义自己的构造函数 2 function Rectangle(w, h){ 3 this.width = w; 4 this.height = h; 5 this.getArea = function(){ 6 return this.width * this.height; 7 } 8 } 9 10 // 每一构造函数都有一个 prototype 属性,属性的值是一个 Object 类型的对象 11 // 我们可以通过 3 种方式获取 prototype 属性的值: 12 13 // 1. 通过构造函数直接获取 14 console.log(Rectangle.prototype) 15 16 // 2. 通过对象(构造函数的实例)__proto__ 属性获取,不建议使用这种方式 17 var rect1 = new Rectangle(20, 60); 18 console.log(rect1.__proto__) 19 20 // 3. 使用 Object.getPrototypeOf() 方法获取 21 console.log(Object.getPrototypeOf(rect1))
获取 prototype 属性的值
1. 通过构造函数直接获取
2. 通过对象(构造函数的实例)__proto__ 属性获取,不建议使用这种方式
3. 使用 Object.getPrototypeOf() 方法获取
var obj1 = {
myName: '张俊娜',
age: 19,
gender: '女',
address: '郑州'
};
for in 遍历出对象的属性名和属性值
for (var propertyName in obj1) {
console.log(propertyName +' :'+obj1[propertyName])
}
使用 Object.keys() 获取对象中的所有属性名(键)
var Okey=Object.keys(obj1);
for (var i = 0; i < Okey.length; i++) {
console.log(Okey[i]+"==>"+obj1[Okey[i]])
}
对象的属性可以分成几种类型?
两类:
数据属性:数据属性一般用于储存数据值,
访问器属性:不包含数据值、多用于get/set操作
属性的特性有哪些,分别代表什么意思?
使用Object.getOwnPropertyDescriptor()获取属性的特征。
数据属性的特性:
是否可枚举(遍历) enumerable: true
是否可配置(删除) configurable: true
是否可写 writable: true
属性值 value: “XX”
访问器属性特征:
是否可枚举(遍历) enumerable: true
是否可配置(删除) configurable: true
在读取属性时调用的函数 get
在写入属性时调用的函数 set
禁止扩展的对象、被封印的对象和被冻结的对象分别有哪些特点?
Object.isExtensible(obj); 判断此对象是否是可扩展的(可添加属性的)。
Object.preventExtensions(obj); 使对象变得不可扩展,即永远不可添加新属性。
不能添加新属性
可以修改已有的属性
可以删除已有的属性
可以访问已有的属性
可以枚举已有的属性
Object.isSealed(obj); 判断对象是否为封印
Object.seal(obj); 设置对象为封印
不能添加新属性(不可扩展)
不能删除已有属性
可以修改已有的属性
可以访问已有的属性
可以枚举已有的属性
Object.isFrozen(obj); 判断对象是否为冻结
Object.freeze(obj); 设置对象为冻结
不能添加新属性(不可扩展)
不能删除已有属性
不能修改已有的属性
可以访问已有的属性
可以枚举已有的属性
怎样判断对象中是否有某个属性?
点( . )或者方括号( [ ] )
通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性,则会返回undefined。当然,这里的“不存在”指的是对象自身和原型链上都不存在,如果原型链有该属性,则会返回原型链上的属性值。
这种方式很简单方便,局限性就是:不能用在x的属性值存在,但可能为 undefined的场景。
in 运算符
如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。
这种方式的局限性就是无法区分自身和原型链上的属性,在只需要判断自身属性是否存在时,这种方式就不适用了。
hasOwnProperty()
可以看到,只有自身存在该属性时,才会返回true。适用于只判断自身属性的场景。
当读取一个对象的属性时,JavaScript引擎是怎样查找该属性的?
当读取一个对象的属性时,JavaScript引擎首先在该对象的自有属性中查找属性名字。如果找到则返回。
如果自有属性中不包含该属性,则JavaScript会沿着原型对象链搜索原型对象中的属性。
如果找到则返回,否则返回undefined。