js的原型和闭包1

in js with 0 comment views: 661 times

原文:深入理解javascript原型和闭包(1)——一切都是对象

一切都是对象

“一切都是对象” 这句话重点在于如何去理解“对象”这个概念。当然,也不是所有的都是对象,值类型就不是对象。

typeof

typeof(MDN详细介绍:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof )运算符,可以返回一个对象或原始值的类型。

function show(x) {
  console.log('1-->>',typeof x)
  console.log('2-->>',typeof 10)
  console.log('3-->>',typeof 'abc')
  console.log('4-->>',typeof true)
  console.log('5-->>',typeof function(){})
  console.log('6-->>',typeof [1,'a',true])
  console.log('7-->>',typeof {a:10,b:20})
  console.log('8-->>',typeof null)
  console.log('9-->>',typeof new Number(10))
}
show()

QQ20180408-223640.png

上面的代码列出了 typeof 输出的几种类型,其中上面的1-4属于简单的 值类型 ,不是对象。剩下的几种情况-- 函数,数组,对象,null,new Number(10) 都是对象,他们都是 引用类型

判断值类型用 typeof ,引用类型的类型判断使用 instanceof

var fn = function(){};
console.log('instanceof-->>',fn instanceof Object)

QQ20180408-231259.png

对象

对象--若干属性的集合。
js中对象比较随意,数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?---方法也是一种属性。因为它的属性表示为 键值对 的形式。

而且,js中对象可以任意的扩展属性。

先说个最常见的例子:

var obj = {
  a: 10,
  b: function(x){
    console.log(this.a + x)
  },
  c: {
    name: 'weber',
    year: 2018
  }
}

上面的代码中,obj是一个自定义的对象,其中a、b、c就是他的属性,而且c的属性值还是一个对象,c又有name,year两个属性。

这个可能比较好理解,那么函数和数组也可以这样定义属性吗?---当然不行,但是它可以用另一种形式,总之函数、数组之流,只要是对象,他就是属性的集合。

以函数为例子:

var fn = function(){
  console.log('fn函数')
}
fn.a = 10;
fn.b = function(){
  console.log('fn.b')
}
fn.c = {
  name: 'weber',
  year: 2018
}

上面的代码中,函数就作为对象被赋值了a、b、c三个属性---很明显,这就是属性的集合。

这个有用吗??
可以看下jq的源码,“jQuery” 或者 “$” 这个变量其实是一个函数。

Responses