js对象学习笔记

-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"]

学的越来越远,笔记做了很久,尴尬,属于小菜鸟的挣扎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值