原型和原型链

原型和原型链


构造函数
    大写字母开头
    function Foo(name, age) {
        this.name = name;
        this.age = age;
        this.class = 'class-1';
        //return this //默认有这一行
    }
    var f = new Foo('zhangsan', 20);
    //var f1 = new Foo('lisi', 22)  //创建多个对象
构造函数 - 扩展
    var a = {} 其实是 var a = new Object() 的语法糖
    var a = [] 其实是 var a = new Array() 的语法糖
    function Foo(){...} 其实是 var Foo = new Function(...)
    使用 instanceof 判断一个函数是否是一个变量的构造函数




原型规则和示例
    5条原型规则
    原型规则是学习原型链的基础
    1、所有的引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性(除了“null”以外)。
        var obj = {}; obj.a = 100;
        var arr = [];a rr.a = 100;
        function fn () {}
        fn.a = 100;
    2、所有的引用类型(数组、对象、函数),都有一个 __proto__ 属性,属性值是一个普通的对象。隐式原型


    3、所有的函数,都有一个prototype属性,属性值也是一个普通的对象。显式原型 


    4、所有的引用类型(数组、对象、函数),__proto__ 属性值指向它的构造函数的 “prototype” 属性值 


    5、当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的 __proto__(即它的构造函数的prototype)中寻找。 
        //构造函数
        function Foo(name, age) {
            this.name = name;
        }
        Foo.prototype.alertName = function () {
            alert(this.name);
        }
        //创建示例
        var f = new Foo('zhangsan');
        f.printName = function () {
            console.log(this.name);
        }
        //测试
        f.printName();
        f.alertName();


        //循环对象自身的属性
        var item;
        for (item in f) {
            //高级浏览器已经在 for in 中屏蔽了来自原型的属性
            //但是这里建议大家还是加上这个判断,保证程序的健壮性
            if (f.hasOwnPrototype(item)) {
                console.log(item);
            }
        }
原型链


instanceof
    用于判断引用类型属于那个构造函数的方法
        f instanceof Foo 的判断逻辑是:
        f的 __proto__一层一层往上,能否对应到 Foo.prototype
        再试着判断f instanceof Object
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值