美文网首页
js原型和闭包 ( 1 )——一切皆对象

js原型和闭包 ( 1 )——一切皆对象

作者: 为君梳作半面妆 | 来源:发表于2017-10-15 12:31 被阅读0次

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

“一切都是对象”这句话的重点在于如何去理解“对象”这个概念。

——当然,也不是所有的都是对象,值类型就不是对象。

function show(x) {

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

}

show();

以上代码列出了typeof输出的集中类型标识,其中上面的四种(undefined, number, string, boolean)属于简单的值类型,不是对象。剩下的几种情况——函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。

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

varfn =function() { };

console.log(fninstanceofObject);//true

对象——若干属性的集合。

java或者C#中的对象都是new一个class出来的,而且里面有字段、属性、方法,规定的非常严格。但是javascript就比较随意了——数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?——方法也是一种属性。因为它的属性表示为键值对的形式。

而且,更加好玩的事,javascript中的对象可以任意的扩展属性,没有class的约束。这个大家应该都知道,就不再强调了

var obj = {

 a:10,

b:function(x){

 alert(this.a+x);

},

c:{

 name:"刘慧玲",

year:1991

}

};

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

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

以函数为例子:

var fn = function () {

alert(100);

};

fn.a = 10;

fn.b = function () {

alert(123);

};

fn.c = {

name: "王福朋",

year: 1988

};

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

你问:这个有用吗?

回答:可以看看jQuery源码!

在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,不信你可以叫咱们的老朋友typeof验证一下。

console.log(typeof$);//functionconsole.log($.trim(" ABC "));

验明正身!的确是个函数。那么咱们常用的 $.trim() 也是个函数,经常用,就不用验了吧!

很明显,这就是在$或者jQuery函数上加了一个trim属性,属性值是函数,作用是截取前后空格。

javascript与java/C#相比,首先最需要解释的就是弱类型,因为弱类型是最基本的用法,而且最常用,就不打算做一节来讲。

其次要解释的就是本文的内容——一切(引用类型)都是对象,对象是属性的集合。最需要了解的就是对象的概念,和java/C#完全不一样。所以,切记切记!

相关文章

  • js原型和闭包 ( 1 )——一切皆对象

    深入理解javascript原型和闭包(1)——一切都是对象 “一切都是对象”这句话的重点在于如何去理解“对象”这...

  • 深入理解javascript原型和闭包(完结)

    深入理解javascript原型和闭包(1)——一切都是对象 深入理解javascript原型和闭包(2)——函数...

  • 原型链

    原型链 this指向 作用域和预解析 new关键字 闭包 继承 JS 规定,所有对象都有自己的原型对象(proto...

  • Javascript高级话题

    面向对象、作用域、闭包、设计模式等。 1. 常见的JS类定义方式 构造函数原型 对象创建 原型法是通用老方法,对象...

  • 前端js面试题

    1、原型、原型链 原型:js中一切皆对象,对象都有一个隐式的属性_proto_,它指向该对象的原型-prototy...

  • JS博客

    JS构造函数及new运算符 JS原型对象和原型链 函数作用域和作用域链 干货分享:让你分分钟学会JS闭包 深入理解...

  • JavaScript原型和原型链

    js里,一切皆对象,但有普通对象和函数对象之分,通过new Function()创建的对象就是函数对象。 原型对象...

  • js原型和继承

    说到原型就不得不说构造函数,js一切皆对象,但分为普通对象和函数对象,构造函数就属于函数对象,所谓的原型和继承也是...

  • js继承的方法总结(prototype,call,apply)

    1,js原型(prototype)继承 首先了解下prototype1,在js一切皆对象中,了解到凡是通过new ...

  • js插件通用写法

    主要思想:1.创建js对象 -- 混合使用构造函数和原型模式2.闭包防止全局污染代码 例子如下:没有具体实现什么,...

网友评论

      本文标题:js原型和闭包 ( 1 )——一切皆对象

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