一、简单使用构造原型加prototype造简单的轮子。

1、想jQ那样获取HTML元素,先看JS代码

 function Cmf() { //创建构造函数

     this.arry = []

 }
 Cmf.prototype.getNode = function(tag, id) { //给构造函数定义一个getNode方法
     if (tag.indexOf('.') == 0) { //如果传入的是类class形式 .nav
         var oparent = id ? document.getElementById(id) : document;
         var oparentallchild = oparent.getElementsByTagName("*"); //选取oparent里面的所有的子项目
         for (var i = 0; i < oparentallchild.length; i++) {

             if (oparentallchild[i].className == tag.substring(1)) {

                 this.arry.push(oparentallchild[i])
             }
         }
     }else if(tag.indexOf('#') == 0&&id==null){  //如果传入的是id形式的 如#d
         this.arry.push(document.getElementById(tag.substring(1)))
     }else{ //如果传入的div 或者span形式的
         var Tagname=document.getElementsByTagName(tag)
         for(var i=0;i<Tagname.length;i++){
             this.arry.push(Tagname[i])
         }
     }
     return this
 }

 Cmf.prototype.html=function(h){  //设置获取html
     for(var i=0;i<this.arry.length;i++){
     if(h){
         this.arry[i].innerHTML=h
         return this
         }else{
             return this.arry[i].innerHTML
         }
     }

 }

 Cmf.prototype.css=function(attr,value){ //设置css样式
     console.log(this.arry)
     for(var i=0;i<this.arry.length;i++){
         if(value){
             console.log(this.arry[i])
             this.arry[i].style[attr]=value
             return this
         }else{
             if (typeof window.getComputedStyle != 'undefined') {//W3C
                 return window.getComputedStyle(this.arry[i], null)[attr];
             } else if (typeof this.arry[i].currentStyle != 'undeinfed') {//IE
                 return this.arry[i].currentStyle[attr];
             }
         }
     }
 }

 var cmf=function(){  //每次调用都实例化一次
     return new Cmf()
 }

a、上面是通过构造函数加原型给HTML元素封装html()或者css()方法;this.arry储存这html元素,getNode方法是获取html元素存到this.arry里面,为啥要返回this呢(25行,32行,46行)

this代表这你实例化之后的那个对象,这样可以进行链式操作。

b、注意 this.arry(3行)的位置,不能写成Cmf.prototype.arry=[];为什么呢?先来一张图

比如这个构造函数Box,实例出两个对象对象box1和box2,在这张图的堆内存可以看出构造函数Box里面的方法和属性是不共享的,而Box的原型里面的方法和属性是共享的。

当写成Cmf.prototype.arry=[]时候,第一次cmf.getNode(#mm)它返回的arry只有#mm节点,第二次cmf.getNode(#nn)它返回的有#mm和#nn这两个节点,因为第一次把节点元素#mm储存在原型里面,第二次在push()时也把#nn储存进去了。

c、第58行中

每次调用cmf()方法都重新实例化一次。如果 new cmf=new Cmf(),只实例化一次,多次使用时就会出现this.arry数组中有其他对象。

prototype/constructor/__proto__之prototype简单应用的更多相关文章

  1. prototype/constructor/__proto__之prototype

    1任何对象都有__proto__属性 属性值Object2并不是所有对象都有prototype属性.只有方法对象(构造函数)以及基本数据类型还有Array,有prototype属性;并且所有方法(对象 ...

  2. 原型模式Prototype,constructor,__proto__详解

    最近由于在找工作,又拿起<JavaScript高级程序设计>看了起来,从中也发现了自己确实还是有很多地方不懂,刚刚看到原型模式这里,今天终于搞懂了,当然,我也不知道自己的理解是否有错. 1 ...

  3. prototype/constructor/__proto__之constructor。

    1.constructor的字面意思就是构造.它是对象的一个属性,它对应的值是该对象的“构造者” //一.构造函数实例化的对象的constructor function Cmf(n,m){ this. ...

  4. prototype constructor __proto__

    constructor, prototype, __proto__ 详解

  5. Js中Prototype、__proto__、Constructor、Object、Function关系介绍

    一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...

  6. 15条规则解析JavaScript对象布局(__proto__、prototype、constructor)

    大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人 ...

  7. javascript--15条规则解析JavaScript对象布局(__proto__、prototype、constructor)

    大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人 ...

  8. 【转】Js中Prototype、__proto__、Constructor、Object、Function关系介绍

    一    Prototype.__proto__与Object.Function关系介绍        Function.Object:Js自带的函数对象.         prototype,每一个 ...

  9. 一篇彻底理解JS中的prototype、__proto__与constructor

    1.基本类型不是对象(boolean.undefined.number.string) 2.引用类型都是对象(Array,function ,Object) 3.对象是通过函数创建,并且强调,对象字面 ...

随机推荐

  1. leetcode排列,求第k个排列

    stl 中的下一个排列在写一遍忘了 写个1个多小时,使用递归写的,错误就在我使用一个list保存当前剩下的数,然后利用k/(n-1)!的阶乘就是删除的数字,但进过观察, 比如 list={1,2,3} ...

  2. HDU 2089 不要62(挖个坑=-=)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. ClientScriptManager与ScriptManager向客户端注册脚本的区别

    使用ClientScriptManager向客户端注册脚本 ClientScriptManager在非异步(就是说非AJAX)环境下使用的.如果要在异步环境下注册脚本应该使用ScriptManager ...

  4. Service的两种启动方法

    刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...

  5. 深入解析Java中volatile关键字的作用

    转(http://m.jb51.net/article/41185.htm)Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制 在java线 ...

  6. 【JAVA - SSM】之SSM入门项目的搭建

    最近学习了一下SSM.SSM是 Spring + SpringMVC + MyBatis 整合框架,非常适合WEB后台开发,也是当前很多人的不二选择.这篇博客带大家来创建一个学习SSM的入门程序,从搭 ...

  7. Google Web Toolkit (GWT)怎么制作多个用户界面

    Google Web Toolkit即GWT是目前基于AJAX技术开发的一个比较成功的框架包,但是其附带例程中只有单页面的实例,那么应该怎么样制作多个页面呢? 其实很简单,GWT的一个模块,就是一个页 ...

  8. VS2012 win7 修改TFS登陆账号的方法

    .修改登陆账号: 在网上搜了好多,都没有找到解决方法,自己琢磨了一会找到了修改登陆TFS(Team Foundation Server)(团队资源管理器)的账号,和大家分享一下吧. 点击“开始”--“ ...

  9. [RxJS] Transformation operators: debounce and debounceTime

    Debounce and debounceTime operators are similar to delayWhen and delay, with the difference that the ...

  10. XML解析技术研究(一)

      摘要:XML作为过去十年中出现的最流行的技术之一,得到了广泛的应用,而其中XML解析技术是XML应用的关键.本文介绍了XML解析技术的研究动向,分析和比较了4种XML解析技术的优劣,并归纳总结了应 ...