本文共 4665 字,大约阅读时间需要 15 分钟。
对象
对象指:具体的一个实物,javascript中对象是指一组没有顺序的属性和方法的集合,所有的事物都是对象,例如:函数,数组,字符串等。属性指事物的特征,一般为名词表示;方法指对象的行为,一般用动词表示。对象使用来存储一组没有规律的信息的数据类型。
JSON格式的数据:
一般都是成对的,是键值对。JSON也是一个对象,数据都是成对的,一般JSON格式的数据无论是键还是值,都是用双引号引起来的
//编程思想:把生活中的事融入到程序中 //面向过程:凡是亲力亲为,每件事的过程都要知道,注重的是过程。 //面向对象:根据要求找对象,所有的事都要对象来做,注重结果。 //面向对象的特征:封装,继承,多态(抽象性) //JavaScript不是面向对象语言,但是可以模拟面向对象思想。 //JavaScript是基于对象的语言。 //对象:看得见,摸得着,具体特质的东西。 //面向对象有什么特点:特征和行为 //instanceof判断一个变量的数据类型,具体方法:变量 instanceof 数据类型,返回的是布尔值。
创建对象的方式:
1.通过字面量的方式创建对象:js中以字面量的方式创建对象使用{},如:var obj = {}一个空对象;给对象添加属性:属性名:属性值,每个属性之间用逗号隔开;给对象添加方法:方法名:function(){},每个方法之间用逗号隔开;调用对象的属性:对象名.属性名或对象名[‘属性名’],调用对象的方法:对象名.方法名();
<script> var obj = { nameObj: 'obj', age: 18, sex: '男', say: function() { console.log('hello'); }, play: function() { console.log('play basketball') } }; console.log(obj.age); //18 console.log(obj['sex']); //男 obj.say();//hello </script>
2.调用系统的构造函数创建对象:new Object();同样是一个空对象,这种方法添加属性的方式为:对象名.属性名 = 属性值;添加方法的方式:对象名.方法名 = function(){};每个属性和方法之间用封号隔开,其调用和字面量的方式一样。
<script> var obj = new Object(); obj.name = '涵涵'; obj.age = 18; obj.sex = '男'; obj.say = function() { console.log('hello'); }; console.log(obj.age); //18 console.log(obj['sex']); //男 obj.say(); //hello </script>
3.自定义构造函数创建对象:以上两种方式不能重复创建对象,如果创建新对象,那么就要重新声明,通过构造函数的方式可以一次性创建多个对象,以便解决代码重复问题。自定义构建函数创建对象做的事:1,在内存中开辟(申请)空间,存储创建的新对象2,把this设置为当前对象3,设置对象的属性和方法4,把this这个对象返回;遍历对象是通过for-in来实现的,其中变量是对象的属性,对象[变量]拿到的才是属性值;
<script> function Student(names, age) { this.names = names; this.age = age; this.say = function(says) { console.log(says); }; }; var stud1 = new Student('小明', 18); console.log(stud1.names); //小明 stud1.say('hello'); //hello var stud2 = new Student('涵涵', 15); console.log(stud2.age); //15 stud2.say('你好'); //你好 function Student(names, age) { this.names = names; this.age = age; this.say = function(says) { console.log(says); }; }; var stud1 = new Student('小明', 18); for (var k in stud1) { // console.log(k); // name age say console.log(stud1[k]);// 小明 18 ƒ (says) {console.log(says);} }; </script>
工厂模式创建对象(不是一种方式):
工厂模式创建对象和构造函数创建对象其共同点是:都需要自定义函数;其不同点:工厂模式创建对象函数名首字母小写,函数中要new Object(),有返回值,创建时不需要new的方式(通过构造函数创建对象函数名首字母大写,函数中不需要写new Object(),无返回值,创建时需要new的方式),
<script> function person(name, age, height, weight) { var obj = new Object(); obj.name = name; obj.age = age; obj.height = height; obj.weight = weight; obj.play = function() { console.log('打游戏'); } return obj; }; var person1 = person('jack', 18, 170, 50); console.log(person1.name); </script>
数据类型分类及之间的特点:
// 原始数据类型:number string boolean undefined null object// 基本类型(简单类型,值类型):number string boolean// 复杂类型(引用型):object// 空类型:undefined null// 值类型的值储存在:栈中// 引用类型的值储存在:地址在栈上储存,对象在堆上储存// var num = 10;//值类型,值在栈上// var obj = {};//复杂类型,对象在堆上,地址(引用)在栈上// 值类型之间的传递,传递的是值// 引用类型间的传递,传递的是地址(引用)// 值类型作为函数的参数,传递的是值// 引用型作为函数的参数,传递的是地址
<script> var num1 =10; var num2 = num1; num1 = 20; console.log(num1);//20 console.log(num2);//10 var num = 50; function f1(num){ num = 60; console.log(num);//60 } f1(num); console.log(num);//50; var num1 = 55; var num2= 66; function f1(num,num1){ num = 100; num1 = 100; num2 = 100; console.log(num);//100 console.log(num1);//100 console.log(num2);//100 } f1(num1,num2); console.log(num1);//100 console.log(num2);//100 console.log(num);//报错,函数里面的num相当于外面的num1,所以没有num这个变量 function Person(name,age,salary){ this.name=name; this.age=age; this.salary=salary; } function f1(person){ person.name='小明'; person = new Person('慧慧',20,1000); } var p =new Person('敏敏',30,10); console.log(p.name);//敏敏 f1(p); console.log(p.name);//小明 </script>
提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者 删除。
笔者:苦海
转载地址:http://sane.baihongyu.com/