js高级

1.js中的对象
在javascript中,一个函数也是一个对象,js中的超级对象是Function,例如:function aa(){alert(aa.constructor);}
再例如:aa.b=1;
因此,在js中可以动态给对象添加属性

只要声明一个函数,它的默认对象就是window
function bb(){}
aa.d=bb;//bb是一个对象,讲bb对象赋值给aa对象的一个属性
aa.d();//调用

任何一个对象都有可能成为另一个任何对象的属性

//处理json数据格式
var json = {‘aa’:’aa’};
aa.jsonObject = json;
alert(aa.jsonObject.aa);

2.js函数返回值

function aa(){
return 123;
}
function bb(){
return true;
}
在函数中定义函数,返回函数
function aa(){
var i=0;
function dd(){
i++;
return i;
}
return dd;//dd是对象
}
var func = aa();
alert(func());
//调用person函数,返回一个对象,该对象有setPid,getPid,setName,getName方法
//通过返回一个json格式的对象可以返回一个特别复杂的对象
function person(){
return {
setPid:function (pid){
this.pid=pid;
},
getPid:function(){
return this.pid;
},
setName:function(name){
this.name=name;
},
getName:function(){
return this.name;
}
};
}
var p = person();
p.setPid(1);
p.setName(“张三”);
alert(p.getPid());
alert(p.getName());

总结:函数的返回值可以返回:数字,boolean,function,json,一切皆可返回
注意:{}=new Object({});

3.js原型
(1)js中一切皆对象
(2)js中没有类的概念,但是js中原型就相当于类
//该Man是一个函数,又是一个对象,还是一个构造器函数
function Man(){
}
//相当于在原型的基础上加东西
Man.prototype.name=”姓名”;
Man.prototype.getName=function(){
return this.name;
}
Man.prototype.setName=function(){
this.name=name;
}
//相当于重新定义原型 {}=new Object({});
Man.prototype={
aa:function(){
alert(“aa”);
},
bb:function(){
alert(“bb”);
}
};
var man = new Man();
man.setName(“张三”);
alert(man.getName());
man.aa();
man.bb();
因为对象都是通过new的形式创建的,一个对象可定有一个constructor属性,而constructor属性就是指向了来创建他的
alert(man.constructor);

原始函数是由Function构造的,例如上面的person,
原型是什么就是由什么产生的,例如:在没有加
Man.prototype={
aa:function(){
alert(“aa”);
},
bb:function(){
alert(“bb”);
}
};时,man的构造器是Man(),而加上之后原型改变了,构造器也跟着改变,此时man的构造器是Object

Man.prototype.constructor=Man;//将构造器由Object变回Man()
可以看出:先有原型后有构造器
js具有构造器链和原型链的概念
总结:
(1)所有的对象都有构造器,Function.constructor为Function
(2)所有的对象都有原型,Function.prototype为function (){}
(3)可以通过构造器函数.prototype.属性的方式给原型增加一个属性
(4)可以通过person.prototype={};的形式改变原型
(5)原型一旦改变,构造器也就改变了
(6)可以通过Man.prototype.constructor=Man;的形式将构造器变回来

//继承写法
function Person(){}
Person.bb =”6”;
Person.prototype.aa=”5”;
var Person = new Person();

function Student(){}
Student.prototype=new Person();//Student的原型指向了Person原型的属性
//Strudent.prototype=Person;//Student的原型指向了Person对象本身

对象属性和全局属性的区别:
//对象属性
Aaary.prototype.min=function(a,b){
return a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值