您当前的位置: 首页 >  jquery

wespten

暂无认证

  • 0浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深入学习jquery源码之创建科学、复用率高的对象

wespten 发布时间:2018-12-23 08:50:37 ,浏览量:0

常规创建对象的方式

通过{},[] 来定义数组和对象

1.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数。

2.[ ]中括号,表示一个数组,也可以理解为一个数组对象。

3.{ } 和[ ] 一起使用,我们前面说到,{ } 是一个对象,[ ] 是一个数组,我们可以组成一个对象数组

调用起来对象的属性用.(点)叠加,数组用 [下标] 来访问。

通过”字面量“的方式来创建对象

var person = {
    name: "dongjc",
    age: 32,
    Introduce: function () { alert("My name is " + this.name + ".I'm " + this.age); }
 };
person.Introduce();  
person.worker = 'coding'; //丰富成员信息

调用方式

var ren ={};
ren.name="张三";
ren.sex="男";
ren.eat=function  () {
   alert("吃饭");
}
alert(ren.name);
alert(ren["name"]);

当我们创建一个对象 ren,会在栈内存中保存一个地址,栈为长度不可变的地址。

而栈中的地址就对应堆中的存储地址。堆中的存储地址,只要实例化会在堆中开辟一块空间,地址就是栈的地址,内容就是实例化对象里面的内容,如name,sex,eat。可以通过地址引用,访问里面的属性和方法。

当我们再实例化一个对象,又会保存另一个地址及开辟一块空间。

代码段,共同的属性或方法放在代码段中,不在堆中。只执行一次,节省内存空间。

 

通过object方式创建对象,动态添加属性和方法

        var p=new Object(); 
	p.name="Jack"; // 动态的添加属性
	p.func=speak;  // 动态的添加方法
	alert(p.name);
	p.func("Hello,Hello,大家好!"); 
	
	 delete p.name; 
	alert(p.name);
	delete p.func;
	p.func("Hello,Hello,大家好!"); 
	
	 p.name=undefined;
	p.func=undefined;
	alert(p.name);
	p.func("Hello,Hello,大家好!"); 
	

 

通过Function函数来创建对象

小括号中最后一个参数是函数体,之前所有的参数都是形参.

 var sayFunc=new Function("name","age","alert(name+'今年'+age+'岁了')");
 // sayFunc("李四",4);
 alert("sayFunc方法对象的方法参数个数:"+sayFunc.length);
 alert(sayFunc.toString());//获取源码
 alert(sayFunc.valueOf());//获取源码

 

 

函数劫持

函数劫持:改变javascript的预定义的函数预定义好的功能

window.alert = function(x){
			document.write(x) ;
		}
			alert("abc") ;

   a.如果两个函数的命名相同,后面的将会覆盖前面的函数。    b.以基本语法声明的函数,会在代码运行的时候,提前加载到内存当中,以供以后使用,      但是匿名函数形式命名的函数,会在执行到的时候,才进行赋值

   c.在不同的块中的函数,使用和调用的时候,应该先定义,后执行。

 

通过工厂模式创建对象

工厂模式虽然解决多次创建相似对象的重复性问题,但是并没有解决对象识别问题,也就是typeof之后他都显示object,具体的对象是什么并没有显示

function createPerson(name,age,job)
    {
        var o=new Object();
        o.name=name;
        o.age=age;
        o.job=job;
        o.sayName=function(){
            alert(this.name);//this指的是o
        }
        return o;
    }
   var person1=createPerson("Tom",23,"厨师");
    person1.sayName();

 

创建科学、复用率高的对象

构造函数模式和工厂模式的区别

  1.没有显式的创建对象。

  2.将属性和方法赋给了this对象。

  3.没有return语句。

  4.函数名第一个字母大写。

构造函数模式优于工厂模式的原因就是,构造函数模式中的对象实例(person1)通过constructor属性或instanceof操作符可以验证person1既是Object的实例,也是Person的实例,同时也证明所有对象均来自于Object。

	function person(name,age){
		this.name2=name;          //那个对象引用this就代表那个对象
		this.age2=age;            //通过this关键字设置默认成员
		var worker = 'coding';    //没有this关键字,对象创建后,该变量为非成员只能在方法内部使用
		function speak(something){
			alert(something);
		}
		
		this.func=speak;
	}
	
	var p1=new person("Jack",12);
	alert(p1.name2);
	p1.func("Hello,EveryOne!");

	function C(){
		var privateFunc=function(){
			alert("私有方法");
		};
		privateFunc();
		this.objFunc=function(){
			alert("对象方法");
		};
		C.prototype.objFunc2=function(){
			alert("对象方法2");
		};
	}
	C.classFunc=function(){
		alert("类方法");
	};

 

定义对象模拟数组

function myArray () {
var lengs=  arguments.length;
for (var i=0; i            
关注
打赏
1665965058
查看更多评论
0.0432s