美文网首页
关于JS的Object对象

关于JS的Object对象

作者: 10m每秒滑行 | 来源:发表于2018-02-27 18:06 被阅读0次

    1.对象的创建

    var object = new Object();
    对象创建完成后可随时为对象添加property,function。如:

    object.name = "fiona";
    object.change = function () {
        console.log("change what?");
    }
    

    2.对象默认的属性和方法

    对象创建后自带的属性,方法:
    a> constructor 构造函数的指向,指向一个function。
    b> hasOwnProperty(propertyName) 是否包含某个属性,入参为string
    c> isPropertypeOf() 用于类型判断,是否为某种类型的实例,入参为object
    d>prototype 指向原型对象,后面会详细说明
    e> _proto_ 指向对象原型,可以理解为一个对象实例初始化时所用的模版

    对比prototype 和_proto_:

    首先prototype是对象类型的属性,不是实例对象的属性。_proto_是类型和实例都有的属性。
    现在定义一个Dog类

    function Dog () {
        this.name = "";
    }
    
    var dog = new Dog();
    

    这个时候,dog初始化的时候,是有一个自定义属性,name为空串。如果有需求时每一个Dog实例产生时都有一些相同的模版值,除了在构造函数中声明,类似name属性。还可以为Dog声明一个对象模版,定义自定义属性。就可以使用prototype定义:

    Dog.prototype = {
        sex : 'femail'
    }
    

    此时如果重新new一个dog1,dog1就会为Dog {name: "", sex: "femail"}两个属性,一个属性来自于构造函数,一个属性来自于构造模版。
    打印dog1._proto结果为:{sex: "femail"},表示dog1的那些属性来自于Dog的模版。
    此时中途改变一下dog1的sex 属性
    dog1.sex = "mail"
    打印dog1._proto
    结果为:{sex: "mail"},所以实例对象的_proto_记录哪些属性来自于原型模版。

    再定义一个foolDog继承Dog,并定义foolDog的原型模版

    function foolDog() {
        Dog.call(this);
        this.type = "哈士奇"
    }
    
    foolDog.prototype = {
        color :  "whiteAndBlack",
        IQNumber : 10
    }
    
    var hashiqi = new foolDog()
    

    此时hashiqi的属性有
    {name: "", type: "哈士奇",color : "whiteAndBlack", IQNumber : 10 }
    可以看出,foolDog继承了Dog的构造函数中的属性name,但没有继承prototype中定义的属性。因此prototype可以用于定义对象特有的原型属性,并且不被子对象继承。new出来的实例可以查看_proto_属性查看哪些属性来自于原型模版。

    再对比由Dog类型new出的dog实例,和最初样例中的Object生成的实例o,dog也可以是 o.name = "",o.sex = 'femail" 表示的含义。个人感觉在js中类的概念是较弱的,都是为了便于区分理解,由object衍生出来的。

    相关文章

      网友评论

          本文标题:关于JS的Object对象

          本文链接:https://www.haomeiwen.com/subject/uyjmxftx.html