原型与闭包(一)

一切事物皆对象
——当然,也不是所有的都是对象,值类型就不是对象。

判断一个变量是不是对象非常简单。值类型的类型判断用typeof引用类型的类型判断用instanceof

	    console.log(typeof x);    // undefined
            console.log(typeof 10);   // number
            console.log(typeof 'abc'); // string
            console.log(typeof true);  // boolean
            console.log(typeof function () {});  //function
            console.log(typeof [1, 'a', true]);  //object
            console.log(typeof { a: 10, b: 20 });  //object
            console.log(typeof null);  //object
            console.log(typeof new Number(10));  //object
            

常见的运算符typeof输出的数据类型
undefined, number, string, boolean属于简单的值类型;
函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。

对象—若干属性的集合
方法也是属性,它的属性表示为键值对的形式(可以.点方法)

在typeof的输出类型中,function和object都是对象,为何却要输出两种答案呢?都叫做object不行吗?——当然不行

对象都是通过函数创建的( 都是new出来的)

        //var obj = { a: 10, b: 20 };
        //var arr = [5, 'x', true];
       var obj = new Object();
        obj.a = 10;
        obj.b = 20;
       var arr = new Array();
        arr[0] = 5;
        arr[1] = 'x';
        arr[2] = true;

对象是函数创建的,而函数却又是一种对象——天哪!函数和对象到底是什么关系啊?
别着急!揭开这个谜底,还得先去了解一下另一位老朋友——prototype原型

每个函数都有自己的属性叫做prototype,身上都有一个属性对象constructor,指向这个函数本身
在这里插入图片描述
SuperType是是一个函数,右侧的方框就是它的原型。

这个prototype作为对象(属性的集合)不可能就只有一个constructor属性,肯定可以自定义的增加属性;
列如Object
在这里插入图片描述
也可以自己在prototype对象上自定义属性;

        function Fn() { }
        Fn.prototype.name = '古月萧哥';
        Fn.prototype.getYear = function () {
            return 1998;
        };

在这里插入图片描述
隐式原型

每个对象都有一个隐藏的属性——“proto” 这个属性引用了创建这个对象的函数的prototype fn.proto
=== Fn.prototype

每个函数function都有一个prototype
每个对象都有一个__proto__
每个对象都有一个__proto__属性,指向创建该对象的函数的prototype
Object.prototype确实一个特例——它的__proto__指向的是null,切记切记!
在这里插入图片描述
函数是被Function创建的。
下一章继续讲解原型与闭包。
原型与闭包(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值