亚洲城ca88唯一备用构造函数格局定义对象,javascript中万恶的function实例深入分析

复制代码 代码如下:

javascript 构造函数情势定义对象,javascript构造函数

javascript是动态语言,能够在运维时给指标增多属性,也足以给指标删除(delete)属性

复制代码 代码如下:

<html>
<head>
<script type=”text/javascript”>
/*
//01.定义对象第一种方法
var object =new Object();
alert(object.username);
//01.1增加品质username
object[“username”]=”liujianglong”;
//object.username=”liujl”;
alert(object.username);
//01.2删除属性username
delete object.username;//username属性已经从object对象中剔除
alert(object.username);
*/
//02.定义对象第三种方法–在javascript中定义对象的一种最广大的办法
var object={name:”zhangsan”,age:10,sex:”fale”};
alert(object.name);
alert(object.age);
alert(object.sex);
</script>
</head>        
<body>
</body>
</html>

属性名:方法名  也是足以的.因为函数本人正是个目的

javascript 数组排序

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
var array=[1,3,25];
/////////////////////////////////
var compare=function(num1,num2){
    var temp1=parseInt(num1);
    var temp2=parseInt(num2);
    if(temp1<temp2){
        return -1;
    }else if(temp1==temp2){
        return 0;
    }else{
        return 1;
    }
}
//array.sort(compare);//01.函数名是目的援引
////////////////////////////////

//02.无名函数格局//////////////////
array.sort(function c(num1,num2){
var temp1=parseInt(num1);
    var temp2=parseInt(num2);
    if(temp1<temp2){
        return -1;
    }else if(temp1==temp2){
        return 0;
    }else{
        return 1;
    }
});
/////////////////////////////////
alert(array);
</script>
</head>        
<body>
</body>
</html>

javascript中定义对象的二种办法(javascript中并未类的概念,唯有对象 )

首先种方法: 基于已有目的增加其特性和措施

复制代码 代码如下:

<script type=”text/javascript”>
//01.基于已有对象扩张其属性和章程
var object=new Object();
object.username=”zhangsan”;
object.sayName=function (name){
    this.username=name;
    alert(this.username);
}
alert(object.username);
object.sayName(“lisi”);
alert(object.username);
</script>

这种形式具有局限性,因为javascript不像java那样具有类的概念,写三个类,之后new就可以猎取三个具备了这几个属性、方法的对象了。

那时若是要负有object2就只能把地方来的代码再写一份,那是不太好的。

第三种方法: 工厂格局

           类似于java中静态的厂子方法。

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
//对象工厂方法
var  createObject=function(){
    var object=new Object();
亚洲城ca88唯一备用,    object.username=”zhangsan”;
    object.password=”123″;
    object.get=function(){
        alert(this.username+” , “+object.password);
    }
    return object;
}
var obj1=createObject();
var obj2=createObject();
obj1.get();
//修改对象2的密码
obj2[“password”]=”123456″;
obj2.get();
</script>
</head>        
<body>
</body>
</html>

上面这种办法创设对象有坏处(每种对象都有三个get方法,进而浪费了内部存款和储蓄器),创新后的工厂格局(
全体目的分享三个get方法):

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
//全数目的分享的get方法
var get=function(){
    alert(this.username+” , “+this.password);
}
//对象工厂方法
var createObject=function(username,password){
    var object=new Object();
    object.username=username;
    object.password=password;
    object.get=get;//注意:这里不写方法的括号
    return object;
}
//通过工厂方法创立对象
var object1=createObject(“zhangsan”,”123″);
var object2=createObject(“lisi”,”345″);
//调用get方法
object1.get();
object2.get();
</script>
</head>        
<body>
</body>
</html>

其三种办法: 构造函数形式 定义对象

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
var get=function(){
    alert(this.username+” , “+this.password);
}
function Person(username,password){
    //在试行第一行代码前,js引擎会为我们转换多少个目的
    this.username=username;
    this.password=password;
    this.get=get;
   
//在此地,有三个掩蔽的return语句,用于再次回到在此之前生成的目的[这一点是和工厂情势差别的地点]
}
var person=new Person(“zhangsan”,”123″);
person.get();
</script>
</head>        
<body>
</body>
</html>

第多样方法: 原型(Prototype)格局创造对象

prototype是object对象中的属性,全部person对象也得以享有prototype这些本性。

能够给目的的原型扩大一些质量,方法。

单纯的选拔原型方式成立对象的败笔:①不能够传参数,只可以在对象创建后再改造它的值

                                                     
②可能会招致程序错误

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
function Person(){
}
Person.prototype.username=”zhangsan”;
Person.prototype.password=”123″;
Person.prototype.getInfo=function(){
    alert(this.username+” , “+this.password);
}
var person1=new Person();
var person2=new Person();
person1.username=”lisi”;
person1.getInfo();
person2.getInfo();
</script>
</head>        
<body>
</body>
</html>

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
function Person(){
}
Person.prototype.username=new Array();
Person.prototype.password=”123″;
Person.prototype.getInfo=function(){
    alert(this.username+” , “+this.password);
}
var person1=new Person();
var person2=new Person();
person1.username.push(“wanglaowu”);
person1.username.push(“wanglaowu2”);
person2.password=”456″;
person1.getInfo    ();
person2.getInfo();
</script>
</head>        
<body>
</body>
</html>

一味利用原型形式定义对象无法再构造函数中为属性赋初值,只可以在对象生成后再去更动属性值。

第多样办法: 使用原型+构造函数方式来定义对象—-推荐使用

对象时期的习性互不搅扰
梯次对象之间分享同叁个格局

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
//使用原型+构造函数格局来定义对象
function Person(){
    //属性 定义在构造函数中
    this.username=new Array();
    this.password=”123″;
}
    //方法 定义在原型中
Person.prototype.getInfo=function(){
    alert(this.username+” , “+this.password);
}
var p1=new Person();
var p2=new Person();
p1.username.push(“zhangsan”);
p2.username.push(“lisi”);
p1.getInfo();
p2.getInfo();
</script>
</head>        
<body>
</body>
</html>

第种种艺术: 动态原型格局—-推荐使用

        
在构造函数中经过标识量让具备指标分享贰个主意,而种种对象具有本人的品质。

复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
var Person=function (username,password){
    this.username=username;
    this.password=password;
    if(typeof Person.flag==”undefined”){
        alert(“invoked”);
        Person.prototype.getInfo=function(){
            alert(this.username+” , “+this.password);
        }
        Person.flag=true;   
    }
}
var p1=new Person(“zhangsan”,”123″);
var p2=new Person(“lisi”,”456″);
p1.getInfo();
p2.getInfo();
</script>
</head>        
<body>
</body>
</html>

构造函数格局定义对象,javascript构造函数
javascript是动态语言,能够在运行时给目标增多属性,也得以给目的删除(delete)属性
复制…

复制代码 代码如下:

javascript中的函数我们能够把它看作方法应用

复制代码 代码如下:

而function实际上便是指标(即Function类型的实例)

var result=function(num1,num2){
return num1+num2;
}

function Person(num) {
…..
}
Person.prototype.name = “ygm”;
alert(new Person().name);

复制代码 代码如下:

  var result = new Function(“num1”, “num2”, “return num1+num2”);
如上试行效力是同一的,同一时间function result还足以那样写(即函数表明式)

function result(num1, num2) {
return num1 + num2;
}

javascript中最有特点而又令你疑忌的function算一个了
上边看一下常用操作

但OO语言的静态方法都以由类去调用,不可能实例化本人的,javascript中出于其特殊性恰好相反
瞩目这里alertPerson的name属性,假如函数体内未有查找到name则会到原型中去找,假若查找到则会掩盖原型中的name直接回到其值
实际每创设三个function的还要也创设了贰个原型对象,而原型对象引用自object,所以object是负有指标的基类
咱俩得以重写原型对象
Person.prototype=new ParentPerson();
Person的原型对象指向ParentPerson对象,而ParentPerson对象又针对自身的原型对象…,也就产生了原型链…
好了 后天就写到这里…

我们还足以把它当成类,而函数体约等于构造函数

function result(){
return arguments[0]+arguments[1];
}
result(1,2);

复制代码 代码如下:

复制代码 代码如下:

复制代码 代码如下:

复制代码 代码如下:

这俩种写法的独一不同是function是优先试行,而函数表达式是代码实践到才实施,其他各个函数内部皆有一个好像数组的arguments对象
函数实行动态参数,即

arguments在动态传递参数方面通常使用
既是说function是指标,那么它应有也切实性质

function person(){
….
}
person.name=”xxxx”;
person.say=function(){
alert(this.name);
}
person.say(); //alert(“xxxx”)

  var obj=new Object();
  obj.say=function(){
  …..
  }
  obj.say();

function Person(nm){
this.name=nm;
this.say=function(){
alert(nm);
alert(this.name);
}
}
var p1=new Person(“ygm1”);
p1.say(); //alert ygm1 ygm1
var p2=new Person(“ygm2”);
p2.say(); //alert ygm2 ygm2

细心这里要用this.name 因为this代表的是当下目的,假诺直接alert(name)
求的是window对象的习性,同期传进来的参数nm在措施say中得以平素用,其实这提到到效用域链,各样function体正是二个功用域,子域能够访谈到父域的品质,而扭曲并非常(其实也是能够取到的,设计到闭包一些文化,这里不做详解..)
与别的部分OO语言相比,各种类都得以有一部分静态属性或措施,而javascript通过原型来效仿以到达每种对象分享其属性

function doit(){
  …..
}
  doit();

相关文章