prototype/constructor/__proto__之prototype简单应用

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

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

 1 function Cmf() { //创建构造函数
 2
 3     this.arry = []
 4
 5 }
 6 Cmf.prototype.getNode = function(tag, id) { //给构造函数定义一个getNode方法
 7     if (tag.indexOf(‘.‘) == 0) { //如果传入的是类class形式 .nav
 8         var oparent = id ? document.getElementById(id) : document;
 9         var oparentallchild = oparent.getElementsByTagName("*"); //选取oparent里面的所有的子项目
10         for (var i = 0; i < oparentallchild.length; i++) {
11
12             if (oparentallchild[i].className == tag.substring(1)) {
13
14                 this.arry.push(oparentallchild[i])
15             }
16         }
17     }else if(tag.indexOf(‘#‘) == 0&&id==null){  //如果传入的是id形式的 如#d
18         this.arry.push(document.getElementById(tag.substring(1)))
19     }else{ //如果传入的div 或者span形式的
20         var Tagname=document.getElementsByTagName(tag)
21         for(var i=0;i<Tagname.length;i++){
22             this.arry.push(Tagname[i])
23         }
24     }
25     return this
26 }
27
28 Cmf.prototype.html=function(h){  //设置获取html
29     for(var i=0;i<this.arry.length;i++){
30     if(h){
31         this.arry[i].innerHTML=h
32         return this
33         }else{
34             return this.arry[i].innerHTML
35         }
36     }
37
38 }
39
40 Cmf.prototype.css=function(attr,value){ //设置css样式
41     console.log(this.arry)
42     for(var i=0;i<this.arry.length;i++){
43         if(value){
44             console.log(this.arry[i])
45             this.arry[i].style[attr]=value
46             return this
47         }else{
48             if (typeof window.getComputedStyle != ‘undefined‘) {//W3C
49                 return window.getComputedStyle(this.arry[i], null)[attr];
50             } else if (typeof this.arry[i].currentStyle != ‘undeinfed‘) {//IE
51                 return this.arry[i].currentStyle[attr];
52             }
53         }
54     }
55 }
56
57
58 var cmf=function(){  //每次调用都实例化一次
59     return new Cmf()
60 }

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行中

时间: 2024-08-28 10:17:30

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

原型模式Prototype,constructor,__proto__详解

最近由于在找工作,又拿起<JavaScript高级程序设计>看了起来,从中也发现了自己确实还是有很多地方不懂,刚刚看到原型模式这里,今天终于搞懂了,当然,我也不知道自己的理解是否有错. 1.prototype 开头第一句话说,我们每创建一个函数,就会有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含由特定类型或者实例共享的属性和方法. function fn(){}; console.log(fn.prototype); 其实 其实我们创建函数就是调用构造函

prototype/constructor/__proto__之constructor。

1.constructor的字面意思就是构造.它是对象的一个属性,它对应的值是该对象的“构造者” 1 //一.构造函数实例化的对象的constructor 2 function Cmf(n,m){ 3 this.n=n; 4 this.m=m; 5 this.mn=function(){ 6 return this.n+'|'+this.m 7 } 8 } 9 var cmf=new Cmf('c',"q") 10 console.log(cmf.mn()) // c|q 11 con

Js prototype constructor __proto__ Function Object 关系图

constructor 及 prototype皆为对象下属性,  该属性保存着所指对象在内存中地址  ( 指向内存中 一个具体对象 ) 1.首先牢记一个概念 在js中一切皆为对象 eg: Number 为一个对象(函数对象) 该对象有 constructor 属性 该属性保存了Function函数对象在内存中的物理地址, constructor属性指向Function函数对象 Number 为一个对象(函数对象) 该对象有 prototype   属性 该属性保存了Number 原型对象在内存中

prototype constructor __proto__

constructor, prototype, __proto__ 详解

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

大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人当时是怎么做的?设计完之后又变成了什么? 我们来看一张图: 相信大家对这张图都不陌生了,构造函数有一个prototype属性指向其原型.相反原型也有一个constructor指向构造函数.与此同时实例也有一个constructor指向构造函数,这简直就是互相捆绑生怕找不到啊不是吗? 还有一个我们称之

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

Js中Prototype.__proto__.Constructor.Object.Function关系介绍 一    Prototype.__proto__与Object.Function关系介绍        Function.Object:Js自带的函数对象. prototype,每一个函数对象都有一个显示的prototype属性,它代表了对象的原型(Function.prototype函数对象是个例外,没有prototype属性). __proto__:每个对象都有一个名为__proto

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

大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人当时是怎么做的?设计完之后又变成了什么? 我们来看一张图:  相信大家对这张图都不陌生了,构造函数有一个prototype属性指向其原型.相反原型也有一个constructor指向构造函数.与此同时实例也有一个constructor指向构造函数,这简直就是互相捆绑生怕找不到啊不是吗? 还有一个我们称

Js中Prototype、__proto__、Constructor、Object、Function关系介绍 ,JS原型

此文来自:http://www.blogjava.net/heavensay/archive/2013/10/20/405440.html Js中Prototype.__proto__.Constructor.Object.Function关系介绍 一    Prototype.__proto__与Object.Function关系介绍        Function.Object:Js自带的函数对象. prototype,每一个函数对象都有一个显示的prototype属性,它代表了对象的原型(

Javascript深入__proto__和prototype的区别和联系

有一个一个装逼的同事,写了一段代码 function a(){} a.__proto__.__proto__.__proto__ 然后问我,下面这个玩意a.__proto__.__proto__.__proto__是啥,然后我一脸懵逼,prototype还知道一点,这个__proto__,还来三个,是个什么鬼.于是我一直不能放下这个问题,虽然我很懒,很不喜欢费脑子,但是这个坎还是过不去,最近两天研究了大半天,就有了这篇文章.我先说出答案, 上面的值为 null.我还很负责的告诉你,下面的_a._