概念:一组无序属性的集合;属性的值可以是普通数据类型;
键值对:如(color:red)有key有对应的value值
var car={
name:'xiaoming',
age:5,
run:function(){
console.log('nihao');
}
}
console.log(typeof car);//object
访问对象的属性值:car.name
访问对象属性使用点+属性名
修改对象的属性:对象+点+对象名=新的属性值
car.name="1111"
- 添加对象属性:对象+点+新对象名=属性值
car.num="123";
- 删除对象属性
delete car.num;
注: 一个空的dom对象会有很多个对象属性,只是属性值都是null
- 使用[属性名]来访问对象属性,必须加双引号
var pc = {//字面量创建
name: "dell",
size: "15",
color: "black",
start: function(){
console.log('welcome to myWorld');
}
}
console.log(pc['name']);
pc["name"]="apple";
pc["price"]=7280;
console.log(pc["price"]);
delete pc["color"];
console.log(pc);
为什么有两种操作方式:点更简洁,点的右边必须是一个具体的属性名,[]使用范围多,更灵活
[]的使用场景,用于不确定属性的访问
创建属性访问器
function getPro(proName){//形参
console.log(pc.proName);//这样不行,不是具体的属性名undefined
console.log(pc[proName])
}
- 使用for-in操作对象
for(let prop in "abcd"){
console.log(prop);
console.log(pc[prop])
// 可以使用charAt()字符串操作函数
}
第二种创建对象方式 new + 构造函数
var newObj = new Object();//可以省略();
newObj.name = "tom";
newObj.age = 20;
delete newObj.name;
工厂模式创建对象
function factory(name,age,gender,stuNum){
var obj = {};
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.stuNum = stuNum;
obj.say = function(){
console.log("我叫:"+this.name+"我今年"+this.age)
}
//var obj = new Object();
return obj;
}
使用工厂函数创建对象
var stu = factory("name",28,"男","h51614");
构造函数
是一种特殊的函数,用于创建同类对象
js是弱语言,ES6已经正式引入了类
自带的有Date() String() Array();
构造函数的创建
function Person(name,age){
this.name = name;
this.age = age;
this.say = function(){
console.log("我叫"+this.name);
}
}
构造函数和普通函数的区别:不适用return关键字,构造函数执行时,使用new关键字执行构造函数
var p1 = new Person("tom",20);
p1.say()
构造函数的特性:与普通函数的区别
- 构造函数名首字母大写
- 构造函数内部使用this关键字处理属性赋值逻辑
- 构造函数不使用return关键字返回新对象
- 使用new关键字执行函数。
构造函数与实例:实例是new+构造函数创建的对象,新对象叫做构造函数的实例,实例与构造函数之间是多对一的关系
原型
每一个函数都有一个私有的原型属性prototype,初试状态,这个值是一个object类型的对象
原型最重要的作用是为所有实例提供公共的空间,原型内的属性可以提供给构造函数所有的实例复用
每一个实例都有一个‘__proto__’属性指向构造函数的原型
什么是原型?每一个函数都有一个私有的原型属性prototype,
他们对应的实例都有一个公共的__proto__指向构造函数的原型
是函数就有__proto__,