prototype/constructor/__proto__之prototype简单应用
一、简单使用构造原型加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简单应用的更多相关文章
- prototype/constructor/__proto__之prototype
1任何对象都有__proto__属性 属性值Object2并不是所有对象都有prototype属性.只有方法对象(构造函数)以及基本数据类型还有Array,有prototype属性;并且所有方法(对象 ...
- 原型模式Prototype,constructor,__proto__详解
最近由于在找工作,又拿起<JavaScript高级程序设计>看了起来,从中也发现了自己确实还是有很多地方不懂,刚刚看到原型模式这里,今天终于搞懂了,当然,我也不知道自己的理解是否有错. 1 ...
- prototype/constructor/__proto__之constructor。
1.constructor的字面意思就是构造.它是对象的一个属性,它对应的值是该对象的“构造者” //一.构造函数实例化的对象的constructor function Cmf(n,m){ this. ...
- prototype constructor __proto__
constructor, prototype, __proto__ 详解
- Js中Prototype、__proto__、Constructor、Object、Function关系介绍
一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...
- 15条规则解析JavaScript对象布局(__proto__、prototype、constructor)
大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人 ...
- javascript--15条规则解析JavaScript对象布局(__proto__、prototype、constructor)
大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人 ...
- 【转】Js中Prototype、__proto__、Constructor、Object、Function关系介绍
一 Prototype.__proto__与Object.Function关系介绍 Function.Object:Js自带的函数对象. prototype,每一个 ...
- 一篇彻底理解JS中的prototype、__proto__与constructor
1.基本类型不是对象(boolean.undefined.number.string) 2.引用类型都是对象(Array,function ,Object) 3.对象是通过函数创建,并且强调,对象字面 ...
随机推荐
- UVa 11825 集合dp
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...
- poj 1383 Labyrinth【迷宫bfs+树的直径】
Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4004 Accepted: 1504 Descrip ...
- 层层递进Struts1(八)之总结
先来看一下Struts1学习总结的思维导图,画的主要是Struts1中的重点和博客分布,如下所示: 系列博客的侧重点是: Struts1是什么? 为什么要使用它? 如何使用Struts1? Strut ...
- .Net设计模式_单列模式
理解 博友的经典说法:很多人排队去厕所蹲坑一样,每一次只能让一个人去蹲坑,这是一种通俗的理解. 理论上的理解则为,我们需要写一个类,这个类的作用就是控制,从而保证在整个应用程序的生命周期中,在任何时刻 ...
- Mina学习之IoBuffer
IoBuffer是一个被MINA体系所使用的字节数组.它是ByteBuffer的替代品,Mina不使用NIO的ByteBuffer有两个原因: 1. ByteBuffer没有提供更多有用的api,如f ...
- 关于GCC的理解——On the understanding of the GCC
GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就 ...
- MVC系列之开始
4月5号晚本来应该写出来的,这几天迷上了炉石传说,打得有点疯,明天又得上班了,收拾心情还是得写出来.上星期5晚上回家的时候,不得不吐槽一下的确有点背.6点下班冲去江夏地铁站,赶7点15分到江门的轻轨 ...
- linux ----Inode的结构图
http://www.ruanyifeng.com/blog/2011/12/inode.html 先看看Inode的结构图 再来了解一下文件系统如何存取文件的 1.根据文件名 ...
- eclipse 常见问题及解决
1. Target runtime Apache Tomcat v6.0 is not defined.错误解决方法 原文:http://blog.csdn.net/xw13106209/articl ...
- 【bzoj2938】[Poi2000]病毒
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...