JS中类的概念
类,实际上就是一个function,同时也是这个类的构造方法,new创建该类的实例,new出的对象有属性有方法。
方法也是一种特殊的对象。

类的方法
在构造方法中初始化实例的方法(就是在构造方法中直接编写方法,并new实例化)是不推荐的,消耗内存(每次实例化的时候都是重复的内容,多占用一些内存,既不环保,也缺乏效率)。
所有实例是共有的,创建多个实例不会产生新的function,推荐在类的prototype中定义实例的方法,
prototype中的方法会被所有实例公用。

1. 仿照jQuery封装类
匿名函数

  1. (function () {
  2. //
  3. })();
  4.  
  5. var Id = function (i) {
  6. this.id = document.getElementById(i);
  7. };
  8. window.$ = function (i) {
  9. return new Id(i);
  10. };
  11.  
  12. console.log($('main'));
  1. function Cat(name, color) {
  2. this.name = name;
  3. this.color = color;
  4. }
  5.  
  6. var cat1 = new Cat('大毛', '黄色');
  7. var cat2 = new Cat('二毛', '黑色');
  8.  
  9. Cat.prototype.a = 'aaa';
  10. Cat.prototype.type = '猫科动物';
  11. Cat.prototype.eat = function () {
  12. alert('吃老鼠');
  13. };
  14.  
  15. cat1.eat();
  16. cat2.eat();
  17.  
  18. console.log(cat1.name);
  19. console.log(cat2.color);
  20.  
  21. // cat1和cat2会自动含有一个constructor属性,指向它们的构造函数。
  22. console.log(cat1.constructor == Cat);
  23. console.log(cat2.constructor == Cat);
  24.  
  25. // Javascript还提供了一个instanceof运算符,验证原型对象与实例对象之间的关系。
  26. console.log(cat1 instanceof Cat);
  27. try {
  28. console.log(a instanceof Cat);
  29. } catch (e) {
  30. console.log(e);
  31. }

所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。
Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

prototype模式的验证方法
1. isPrototypeOf() 判断某个prototype对象和某个实例之间的关系
2. hasOwnProperty() 判断一个属性是本地属性还是继承自prototype对象的属性
3. in 判断是否在某个对象里

  1. function Cat(name, color) {
  2. this.name = name;
  3. this.color = color;
  4. }
  5.  
  6. Cat.prototype.type = '猫科动物';
  7.  
  8. var cat1 = new Cat('大毛', '黄色');
  9. var cat2 = new Cat('二毛', '黑色');
  10.  
  11. console.log(Cat.prototype.isPrototypeOf(cat1));
  12. console.log(Cat.prototype.isPrototypeOf(cat2));
  13.  
  14. console.log(cat1.hasOwnProperty('name'));
  15. console.log(cat2.hasOwnProperty('type'));
  16.  
  17. console.log('name' in cat1);
  18. console.log('type' in cat1);

未完:构造函数的继承:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html
非构造函数的继承:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html

JS的封装(JS插件的封装)的更多相关文章

  1. js封装成插件

    由于项目原因,工作一年多还没用js写过插件,项目太成熟,平时基本都是在使用已经封装好的功能插件.感觉自己好low......这两天想自己抽空写一个canvas画统计图与折现图的插件,所以就去网上学习了 ...

  2. 封装js插件学习指南

    封装js插件学习指南 1.原生JavaScript插件编写指南 => 传送门 2.如何定义一个高逼格的原生JS插件 =>传送门 3.手把手教你用原生JavaScript造轮子 =>  ...

  3. JS弹出框插件zDialog再次封装

    zDialog插件网址:http://www.jq22.com/jquery-info2426 再次封装zDialog的代码: (function ($) { $.extend({ iDialog: ...

  4. seajs封装js方法

    必须要先引入sea.js文件 <script src="js/sea.js"></script> 其次,引入其他js文件 <script> se ...

  5. 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,

    封装常用的js(Base.js)——[01]理解库,获取节点,连缀,  youjobit07 2014-10-10 15:32:59 前言:       现如今有太多优秀的开源javascript库, ...

  6. 封装js千分位加逗号和删除逗号

    //封装js千分位加逗号和删除逗号 alert( format(2545678754.020001) ) //2,545,678,754.03 alert( format(-2545678754.02 ...

  7. js cookie创建读取删除函数封装

    js cookie创建读取删除函数封装 一.总结 都是为了方便操作,这样弄了很方便 1.创建cookie的函数封装的作用:方便设置过期时间expire,方便设置键和值 2.查询cookie的数据封装的 ...

  8. js使用工具将表单封装成json字符串传到后台,js截取字符串(学生笔记)

    <script src="js/jquery.min.js"></script> <script src="https://cdn.boot ...

  9. Asp.net封装js的类

    using System; using System.Collections.Generic; using System.Text; using System.Web; using System.We ...

  10. 深入js的面向对象学习篇(封装是一门技术和艺术)——温故知新(二)

    下面全面介绍封装和信息隐藏. 通过将一个方法或属性声明为私用的,可以让对象的实现细节对其它对象保密以降低对象之间的耦合程度,可以保持数据的完整性并对其修改方式加以约束.在代码有许多人参与设计的情况下, ...

随机推荐

  1. ThinkPHP U方法

    方法1: {:U('User/Booking/bookingdetails')} 方法2: {:U('User/Booking/bookingdetails')}"+"&a ...

  2. What Goes Up UVA - 481 LIS+打印路径 【模板】

    打印严格上升子序列: #include<iostream> #include<cstdio> #include<algorithm> #include<cst ...

  3. 2B - Amy

    数据范围是18位,把每一位加起来的和最多9*18 = 162 所以只需考虑n-162 - n的数即可,暴力解决 #include <iostream> using namespace st ...

  4. 20165224 陆艺杰 《Java程序设计》课程总结

    每周作业链接汇总 https://www.cnblogs.com/lyj-/p/8414278.html https://www.cnblogs.com/lyj-/p/8695018.html htt ...

  5. 关于python中的round()和javascript中的round()的比较

    ps:python的round()和javascript的round()的比较: javascript:Math.round():正常的标准舍入,就像我们学的数学课本上面的规则 python:pyth ...

  6. python学习之路---day18--反射

    一:isinstance,type,issubclass  001:内置函数:isinstance() class Base: pass class Foo(Base): pass class Bar ...

  7. stiff chemistry模型出现NaN错误

    通过定位可以看到,是usr_rates.f中出现了奇异值,因为我的代码中有这样一句话: 而同时我的ConH2在声明后没有赋初值,因此,当X_g(IJK,H2) < c_Limiter后,ConH ...

  8. 洛谷 P2542 [AHOI2005]航线规划(Link-cut-tree)

    题面 洛谷 bzoj 题解 离线处理+LCT 有点像星球大战 我们可以倒着做,断边变成连边 我们可以把边变成一个点 连边时,如果两个点本身不联通,就\(val\)赋为\(1\),并连接这条边 如果,两 ...

  9. IOS不支持overflow: hidden;

    IOS不支持overflow: hidden; 假设页面上有个弹出窗,弹出窗出现后,只想让用户的视觉锁定在弹出窗上,正常我们会想到用overflow:hidden这个属性来实现,如下 html{ ov ...

  10. SQL中的正则表达式

    [转自] http://blog.csdn.net/weiwenhp/article/details/6943834 当我们要进行一些简单的糊涂查询时用百分号(%),通配符(_)就可以了.其中%表达任 ...