对象&原型对象&原型链
来源:互联网 发布:软件代理合同范本 编辑:程序博客网 时间:2024/04/30 02:08
对象(属性或方法)
- 属性:用于描述当前对象的信息 方法:用于描述当前对象的行为- 分类:内置对象 – JavaScript本身提供好的对象 宿主对象 – 主要以浏览器提供的一些系列对象为主、 自定义对象:程序员自己定义的对象
- 基本数据类型他们都是一个一个单一的值,
- 值与值之间没有任何的联系,也就是说我们不能使用基本数据类型来表示一些复杂的数据
- 对象是一种复合数据类型,它就相当于一个容器,在对象中可以保存多个不同数据类型的值。
- 对象的初始化器(声明对象方式[推荐]
var 对象名 = {
属性名:属性值,
属性名:属性值,
方法名:function(){
方法体
},
属性名:属性值 //最后一条属性不加 逗号
} 注意,最后一个属性的后边不要写逗号,属性名可以用引号引来但是一般不需要,如果属性名是结构复杂的名字,则必须使用引号
构造函数方式创建对象[推荐](使用new关键字调用的函数)
var 对象名 = new Object();- 使用 Object.create()创建对象
前提:必须先存在一个对象
语法结构:
var 对象名 = Object.create(已存在的对象名)
特点:相当于将已存在的对象进行复制(属性和方法同样拥有)
- 使用 Object.create()创建对象
添加对象属性和调用对象属性
- 向对象中添加属性:
语法1:
对象.属性名 = 属性值;
对象.方法名=function(){ };
例如:obj.name = “孙悟空”;
语法2:通用的属性命名方式
对象[‘属性名’] = 属性值
例如:obj[‘name’]=孙悟空; - 读取对象中的属性
语法1:
对象.属性名
例如:console.log(obj.name);
语法2:
对象[‘属性名’] //属性名必须加 单引 或是 双引
例如: console.log(obj[‘name’]);
* 调用方法: 对象名[‘方法名’]()
例如: obj‘sayname’;
- 向对象中添加属性:
通过 . 或 [] 都可以对属性进行操作,本质上是相同的, 但是[]这种方式更加灵活,在[]中可以传变量
例如:
var str = “name”;
console.log(obj[str]);- 调用错误属性错误:
- 如果读取对象中不存在的属性,不会报错,而是返回undefined
如果调用一个不存在的方法时,会报错。
检查一个对象中是否含有某个属性 in 运算符
- in可以用来检查一个对象中是否含有某个属性,如果含有则返回true,否则返回false
- 语法:
‘属性名’ in 对象
console.log(‘name’ in obj2);检查在对象obj2中是否有name这个属性。
方法二:
利用 if … else语句进行判断【推荐】
方法三:
使用 Object.hasOwnProperty(对象名);- 枚举对象中的属性[推荐使用] 使用 for…in语句
语法:
for(var 变量 in 对象名){
语句…
}
变量 – 获取当前循环对象的所有的属性名或方法名
对象名[变量] – 获取当前对象的所有的属性值或方法体
例如:
for(var n in obj2){
console.log(n + ” = ” +obj2[n]);
}
for…in的循环体,对象中有几个属性就会执行几次,每次执行都会将对象中的一个属性名赋值给变量,将obj2中的属性赋值给变量n - Object.keys(对象名)
返回值:对应对象所有的属性和方法
- 枚举对象中的属性[推荐使用] 使用 for…in语句
- 语法:
- Object.getOwnPropertyNames(对象名)
例如:var arr=Object.getOwnPropertyNames(hero);
console.log(arr[0]); //得到对应的属性名
console.log(hero[arr[0]]) //得到对应的属性值 - 操作对象的属性或方法:
修改属性或方法的语法和变量一样。
- 删除属性或方法(方法只写名,不加括号)
delete 对象.属性名
例如:delete obj.name;
- 删除属性或方法(方法只写名,不加括号)
对象中的属性值可以是任意的数据类型,也可以是一个对象
obj.test = new Object();
obj.test.name = “孙悟空”;- 基本数据类型在变量中直接保存的数据的值,值与值之间是互相独立,互不影响,修改一个变量不会影响其他的变量
- 引用数据类型在变量中保存的是对象的引用(对象的地址),如果两个变量保存的引用(对象地址)是相同,则此时两个变量指向的是同一个对象,这时修改一个变量,有可能影响到另一个
- 基本数据类型比较时,比较的是数据的值,只要值一样就返回true
- 引用数据类型在比较时,比较的是对象的引用(内存地址),如果对象的内容一样,但是地址不同,也会返回false
- 垃圾回收:只需要将不用的对象设置成null,浏览器就会帮我们回收。
Obj=null;
原型对象(prototype)
- 原型是 Function 对象的一个(特殊)属性,所有的构造函数都具有一个属性 – prototype(它本身还是一个对象)
- 原型的作用:扩展/增加构造函数的属性或方法,没有修改原有构造函数的内容
- 如果函数作为一个普通的函数调用,那么原型对象没有任何作用.
- 如果函数作为构造函数调用,那么它所创建的对象中将会有一个隐含的属性,执行该构造函数的原型对象(可以通过proto来访问该隐含属性)。
- 构造函数的自有属性(Function对象的属性):prototype
通过构造函数创建的对象的自有属性(Object对象的属性): proto- 原型的类型:
- 原型默认是一个空对象(对象类型)
- 通过原型(prototype)扩展内置对象的属性或方法。目前,不推荐。因为:
1,修改了JavaScript 底层源代码内容
2,由于 JavaScript 版本更新,引起冲突
若直接打印 console.log(Function.prototype.属性名) // undefined
console.log(Object.proto.属性名) //undefined
因为构造函数的原型,函数对象的原型,在默认的情况下,都是空对象。
只有先添加属性之后,在打印才能输出结果。 - 如何通过prototype向原型中添加属性:
1,直接通过prototype添加属性和方法
Hero.prototype.name=’属性值’;
2,利用自定义对象将原型底层的对象替换
Hero.prototype={
name:’属性值’,
job:’属性值’
}
- 原型的类型:
原型链:
当我们去访问一个对象的属性时,它会先在自有属性中寻找,如果找到了则直接使用,如果没有找到则去对象的原型中寻找,如果找到了,则直接使用,如果依然没有,则去原型的原型中寻找,如果有则使用,如果没有则继续寻找,
直到找到Object的prototype,如果依然没有,则返回undefined
- Object的prototype的原型是null
- 所以我们可以将对象中共有的属性和方法统一保存到原型对象中,这样既可以确保每个对象都可以使用这些方法和属性,又能确保属性和方法只有一个而且也不会污染全局的命名空间
- 函数对象中既有显示原型prototype又有隐式原型 proto,函数的显示原型是给它的实例使用的,函数的隐式原型是给自己使用的。
- 如果沿着原型链寻找属性没有找到不会报错而是返回undefined,如果沿着作用域链寻找变量没有找到会报错
- hasOwnProperty()它可以用来检查对象的属性是否是自身的属性,如果属性是原型中的,它会返回false
//console.log(per1.proto.hasOwnProperty(“toString”));
- 构造函数自身属性与原型属性同名时:
* 默认得到构造函数自身属性
* 当自身属性和原型属性同时存在时,自身属性的优先级别高于原型属性
- 构造函数 A 函数对象 a
A.prototype.属性名 == a.proto.属性名
A只能使用 prototype a 只能使用 proto - 要达到继承链的关系,要先继承,后赋值。
- 对象,原型,原型链
- 对象&原型对象&原型链
- JavaScript原型对象、原型属性、原型链
- 原型对象与原型链
- 原型对象和原型链
- 原型对象与原型链
- 原型对象与原型链
- 原型对象和原型链
- JS原型对象,原型链
- 原型对象与原型链
- 对象的原型链
- 对象理解原型链
- 面向对象--原型链
- 原型对象
- 对象原型
- 原型对象
- js原型对象与原型链
- Js 原型对象与原型链(转)
- 合并Shader系列 | 如何合并渲染状态
- Hibernate 踩坑日记
- 模拟实现c库的atoi和itoa
- JS数组中的字符串怎么转为数值
- nodejs微信公众号端口问题解决方案
- 对象&原型对象&原型链
- 在linux的终端怎么退出python命令行
- JAVA线程面试题书目录
- CSU 1578
- 基础数论算法(5) 素数的判定
- Spring IoC(控制反转)和DI(依赖注入)的理解
- Android Studio中使用opencv Library330
- Failed to replace env in config: ${APPDATA}
- 使用python builtwith模块分析识别网站开发技术