对象
对象指:具体的一个实物,javascript中对象是指一组没有顺序的属性和方法的集合,所有的事物都是对象,例如:函数,数组,字符串等。属性指事物的特征,一般为名词表示;方法指对象的行为,一般用动词表示。对象使用来存储一组没有规律的信息的数据类型。
JSON格式的数据:
一般都是成对的,是键值对。JSON也是一个对象,数据都是成对的,一般JSON格式的数据无论是键还是值,都是用双引号引起来的,JSON对象在IE8以下是不兼容的,如果需要兼容IE8以下,那么可以使用插件:json3.js:
//编程思想:把生活中的事融入到程序中
//面向过程:凡是亲力亲为,每件事的过程都要知道,注重的是过程。
//面向对象:根据要求找对象,所有的事都要对象来做,注重结果。
//面向对象的特征:封装,继承,多态(抽象性)
//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联系笔者删除。
笔者:苦海