-1.创建对象
- 对象字面量(新建一个键值对的集合创建对象)
`/*var 对象实例名 = {属性1:属性值1, 属性2: 属性值2, .........}*/
var song = {
name:"Welcome To New York", //记得这里面是有逗号分割的
time:216,
"song language":English, //属性名有空格需要加双引号
singer: {
singerName:"Taylor Swift",
singerAge:30
}
};
- 关键字new
/*new 的四个步骤 : 1、创建一个新对象 2.this指向这个新对象 3、执行代码,对this赋值
4、返回this*/
var Car = new Object();//创建实例
Car.name = "BMW";
Car.location = "Everywhere";
Car.price = 231800;
-通过工厂方法创建对象
/*通过函数创建对象的方法*/
funciton createCarObject(name,location,price){
var car = new Object();
car.name = name;
car.location = location;
car.display = function() {
console.log(this.name);
};
return car;
}
var car1 = createCarObject("BMW","Everywhere",231800);
- 使用构造函数创建对象(每创建一次,都会将所有的方法都创建一遍,费内存)
//构造函数
function Car(name,location,price){
this.name = name;
this.location = location;
this.price = price;
}
//创建对象的实例
var myCar = new Car("BMW","Everywhere",231800);
- 使用原型创建对象(便于更改部分属性的值,也是对构造函数构建的改进)
/*创建函数时,会自动拥有一个prototype属性,这个属性的值(对象)即为该函数的原型对象*/
function Car() {};
Car.prototype.name = "BMW";
Car.prototype.location = "Everywhere";
Car.prototype.price = 231800;
var myCar = new Car();
var hisCar = new Car();
hisCar.name = "Lamborghini";//改变了,他的车就不是BMW了,而是Lamborghini
2.属性的处理
- 属性获取的方式,一为 . 符号;二为 [""] 符号。必须使用二的情况:当属性名含有空格字符;属性名动态生成(ID1、ID2、ID3.。。===> [“ID”+i])。
-删除属性 delete
#### 自有属性的概念:对象实例私有的属性,只有该对象实例可用
#### 共有属性的概念:对象实例共有的属性,所有对象实例都可用
var watch = {
name: "Casio",
sum: 3
};
Object.prototype.value = "one";
/*1.删除自有属性 delete 对象实例.属性*/
delete watch.name;
console.log(watch.name); //undefined
/*2.删除共有属性 delete 构造函数.prototype.属性*/
delete Object.prototype.value;
console.log(watch.value); //undefined
3.属性的检测和枚举
属性的检测
* 属性名 in 对象名
* hasOwnProperty(继承object对象)
var watch = {
name: "Casio",
sum: 3
};
Object.prototype.value = "one";
/*1.判断是否是对象实例的属性 */
console.log("value" in watch ); //true 举这个例子,请注意它在prototype那(共有属性)
console.log("a" in watch); // false
/*2.判断是否是对象实例私有的属性 自有属性*/
console.log(watch.hasOwnProperty('name')); //true
console.log(watch.hasOwnProperty('value')); //false
属性的枚举
可枚举性:用户自己定义的属性默认为可枚举,系统内置的对象的属性默认为不可枚举
(一种情况除外:当属性的原型是继承于其它对象原型时,这时用户定义的属性就是不可枚举的)
枚举属性三种方法:
*
for…in…循环 ## 会遍历对象中的所有可枚举属性
for(var p in num) {
console.log("num." + p + "=" + num[p]);
} //无法打印,number中的属性无法被枚举,for in 不起作用
Object.getOwnPropertyNames()不区分是否可被枚举
var car = {
name: "BMW",
location: "Hunan",
color:white
}
Object.defineProperty(car,"range", {
value:4,
enumerable: false //设置属性为不可枚举
});
console.log(Object.getOwnPropertyNames(car));
//输出["name","location","color","range"]
Object.keys()返回可枚举的自有属性
//代码同上
console.log(Object.keys(car));
//输出["name","location","color"]
学的越来越远,笔记做了很久,尴尬,属于小菜鸟的挣扎。