对象介绍
- 概念:对象是具体到某一个事物,具有一定的特征和行为。
- 面向对象:可以创建自定义类型,支持继承和多态。JAVA/C++/C#
- 基于对象:无法创建自定义类型,不能很好的支持继承和多态。 JavaScript(没有接口,抽象类等概念)
- JavaScript 创建对象一般用 new Object()或使用{}; 也可以自己写一个构造函数来创建对象。
- js对象是无序属性的集合;可看作键值对类型,值可以是数据可以是函数。
- 属性可用obj . prop 或者obj[‘prop’]调用访问
- 目的:封装一些数据
//代码表示 var dog = new Object(); var cat= new Object(); var o = {}; dog.name='阿花'; cat['name'] = '阿白'; o.name = "张三"; //调用属性方式 console.log(dog.name);//阿花 console.log(dog['name']);// 阿花 console.log(cat.name);//阿白 console.log(cat['name']);//阿白 console.log(o.name);//张三
this问题
- 谁调用,this就是谁,this始终是当前对象。
- window是js的顶级对象。
对象字面量和JSON
//对象字面量 var o = { name:"zs", age:18, have:{}, say:function(){ console.log("hello"); } }; //json JavaScript Object Notation //和对象字面量的区别,就是属性需要使用引号引起 一种规范 var o1 = { 'name':'ls', 'sex':18 }
forin(遍历数组或者对象)
var obj = { name:"zs", age:18, have:{}, say:function(){ console.log("hello"); } }; for (var key in obj) { //输出属性名+属性值 name---zs,age---18... //如果写成obj.key或obj['key'],则报undefined错误 console.log(key+'----'+obj[key]); }
基本类型/简单类型/复杂类型当参数
//基本类型 //只有栈,传递过程是把变量复制一份,修改函数内部变量,对外部变量无影响 function f1(x){ x = 100; } var x = 1; f1(x); console.log(x);// 1 //简单类型 //同是复制栈上的地址,但指向同一个堆内存对象,无论操作谁,对象改变 function f2(o){ o.name = "zs1"; } var obj = { name:"zs", age:18 } f2(obj); console.log(obj.name);// zs1 //复杂类型 //复制栈地址,指向 堆的同一对象,修改对象,结果改变 function f3(arr){ arr[0] = 10; } var array = [1,2,3]; f3(array); console.log(array);//10,2,3