美文网首页
JS基础知识 (二)--原型规则

JS基础知识 (二)--原型规则

作者: Sunny_MYJ | 来源:发表于2019-10-14 15:21 被阅读0次
    构造函数

    构造函数其实也是普通的函数,只是可以使用构造函数来实例化对象。
    事实上,当任意一个普通函数用于创建一类对象时,它就被称作构造函数。像js的内置函数Object、Array、Date等都是构造函数。
    在定义构造函数有以下几个特点:

    • 以大写字母开头定义构造函数
    • 在函数内部对新对象(this)的属性进行设置
    • 返回值必须是this,或者其它非对象类型的值
      举个栗子:定义一个简单的、标准的构造函数
    function Obj(){
        this.name = 'name'
        return this // 默认有这一行 
    }
    var foo = new Obj() // 使用上面定义的构造函数创建一个对象实例
    
    原型规则

    js原型有5条原型规则,这5条原型规则是学习原型链的基础

    1. 所有的引用类型(数组, 对象,函数),都具有对象特性,即可自由扩展属性(除了"null"以外)
    2. 所有引用类型都有一个__proto__属性(隐式原型属性),__proto__是一个普通的对象
    3. 所有的函数都有一个prototype属性(显式原型属性),也是一个普通对象
    4. 所有的引用类型(数组, 对象,函数),__proto__属性值指向它的构造函数的prototype属性值
      5.当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么就会去它的 __proto__(即它的构造函数的prototype)中寻找
      示例:
    // 规则1
    var obj={};obj.a=100;
    var arr=[];arr.a=100;
    function fn (){}
    fn.a = 100;
    // 规则 2
    console.log(obj.__proto__);
    console.log(arr.__proto__);
    console.log(fn.__proto__);
    //  规则3
    console.log(fn.prototype)
    // 规则4
    console.log(obj.__proto__===Object.prototype)
    
    //规则 5
    function Foo(name,age) {
        this.name = name
    }
    Foo.prototype.alertName=function(){
        alert(this.name)
    }
    var f=new Foo('zhang san')
    f.printName=function(){
        console.log(this.name)
    }
    
    f.alertName()
    f.printName()
    

    补充:循环对象自身的属性

    for(var i in f){
        //高级浏览器已经在for in 中屏蔽了来自原型的属性
        // 但是这里建议大家还是加上这个判断,保证程序的健壮性
        if(f.hasOwnProperty(i)){
            console.log(i)
        }
    }
    
    // 输出
     name
     printName
    

    相关文章

      网友评论

          本文标题:JS基础知识 (二)--原型规则

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