资讯专栏INFORMATION COLUMN

Javascript权威指南--每日一读(对象啊~找对象啊~)

Lucky_Boy / 666人阅读

摘要:创建对象创建对象直接量,。原型每一个对象除了都和另一个对象原型相关联,每个对象都从原型继承属性。前边写过的一个函数找到中的找到结果是,之前提到的不会修改原型链。属性访问错误抛出异常,因为没有属性。存取器属性读取写入可枚举性可配置性。

1.创建对象

创建:对象直接量、new、Object,create()。

原型:每一个对象(除了null)都和另一个对象(原型)相关联,每个对象都从原型继承属性(prototype)。

//例如
new Array()、[]
//创建的对象都继承自Array.prototype;
//Array.prototype又继承自Object.prototype,由此构成的一系列………………………………就是原型链。

创建对象create()的用法:

//create():
var o = Object.create({a:1,b:2});
//如果create(null)的话,他创建的对象不继承任何。
var o1 = Object.create(Object.prototype);
//这样则和new Object()相同。

//通过原型创建新对象(模拟原型继承)
function inherit(p){
    if(p == null){
        throw TypeError();
    }
    if(Object.create){
        return Object.create(p);
    }
    var t = typeOf p;
    if(t != "object" && t != "function){
        throw TypeError();
    }
    function f(){};
    f.prototype = p;
    return new f();
}

2.继承

what is
it?:假设一个对象obj,并查找他的属性o1,如果obj中存在则找到,如果不存在会在obj的原型中查找,如果还木有就在原型对象的原型上边查找,知道找到了或者原型为null了。

var obj = {};
obj.o1 = 1;
var p = inherit(obj)//前边写过的一个函数;
p.o2 = 2;
p.o1 = 2;
console.log(p.toString());//找到Object.prototype中的toString();
console.log(p.o1);//找到obj.prototype,结果是3,之前提到的不会修改原型链。

属性访问错误:

var obj = {};
console.log(obj.v.length);//抛出异常,因为undefined没有length属性。
//可以用下边的方法↓
var len = obj&&obj.v&&obj.v.length;
//利用&&的“短路性”,并在有操作值为true的时候返回其返回值。

3.删除属性

delete不可以删除继承属性,要删除就要在原型对象上删除,并且会影响所有继承它的对象。

var obj = {a:1};
delete obj.a;//delete obj["a"];删除a属性;
delete obj.b;//true
delete obj.toString();//true
delete 1;//true

4.检测属性

in运算符:检测对象以及对象原型链上是否有某属性;

hasOwnProperty:检测对象本身是否有某属性;

propertyIsEnumerable:检测对象本身是否有某可枚举属性;

!==运算符:通过判断属性是否!==undefined;

5.枚举属性

for/in枚举:会枚举出自行添加的属性,须进行判断;

//通过判断来枚举
for(var i in obj){
    if(!obj.hasOwnProperty(i)) continue;
}
//通过extend来枚举↓一个不是很完善的extend
function extend(obj,obj1){
    for(var i in obj1){
        obj[i] = obj1[i]
    }
    return obj;
}

Object.keys()枚举:ES5;

Object.getOwnPropertyNames()枚举:ES5。

5.getter和setter

获取和设置属性的方法

  var obj = {
     val:100,
     get getval(){
         return this.val;
     },
     set setval(x){
         this.val = x;
     }
 }

6.属性的特性

数据属性:值、可写性、可枚举性、可配置性。

存取器属性:读取、写入、可枚举性、可配置性。

通过Object.getOwnPropertyDescriptor()来获取自有特性。

通过definedProperty()/definedProperties()设置属性的特性。

Stronger的extend();

Object.defineProperty(Object.prototype,"extend",{
    writable:true,
    emuerable:false,
    configration:true,
    value:function(obj){
        var names = Object.getOwnPropertyNames(obj);
        for(var i = 0 ; i 

getter&setter老得API,非标准方法

_lookupGetter_
_lookupSetter_
_defineGetter_
_defineSetter_

7.原型属性

用Object.getPrototypeOf()查询原型。

未完~~~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88018.html

相关文章

  • Javascript权威指南--每日一读(类型、值、变量)

    摘要:直接量啥意思直接量就是直接用到的数据例如等等。标识符与保留字啥东西标识符简单讲就是用来对变量和函数进行命名的,标识符不可以以数字开头,可以使用字母和和开头。数字表示不区分整数和浮点数。范围精度有限,超出无意义。 1. 直接量 啥意思?直接量就是直接用到的数据~ 例如:10,100,1.1,Hello Word,true,false等等。 2. 标识符与保留字 啥东西?标识符简单讲就...

    Soarkey 评论0 收藏0
  • Javascript权威指南--每日一读(语句)

    摘要:和都是循环语句,不同的是检测表达式的位置。语句异常语句,所谓异常语句是发生异常或错误的一个标志或信号。抛出异常就是指这个状况,捕获异常实是指处理的过程。语句异常处理机制。语句严格模式中禁止使用语句。 1.switch语句 语句都很熟悉的啦,只是提一句。switch中的case语句匹配的规则实际上是===而非简单的==比较,case匹配不会做任何的类型转换的。 2.while和do/wh...

    CastlePeaK 评论0 收藏0
  • Javascript权威指南--每日一读(表达式、运算符)

    摘要:是一个函数还是一个运算符是一个函数但已经被当成运算符对待了。运算符通过其判断一个对象是否是一个类的实例的时候,判断会包含对父类的检测。运算符或对于所有对象都会返回而非例如想要区分和用用上边的吧。 1.evel是一个函数还是一个运算符? 是一个函数但已经被当成运算符对待了。 evel如果传入一个非字符串则返回此参数,如是字符串则解析这段字符串。 2.instanceof运算符: 通...

    mylxsw 评论0 收藏0
  • 如果想成为一名顶尖的前端,这份书单你一定要收藏!

    摘要:其中负载均衡那一节,基本上是参考的权威指南负载均衡的内容。开发指南读了一半,就是看这本书理解了的事件循环。哈哈创京东一本骗钱的书。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯IVWEB团队 发表于云+社区专栏作者:link 2014年一月以来,自己接触web前端开发已经两年多了,记录一下自己前端学习路上看过的,以及道听途说的一些书,基本上按照由浅入深来介绍...

    Scliang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<