Javascript 进阶知识整理[读Javascript忍者秘籍整理]

对象的创建

  1. 简短对象:一个键值对的集合
    var obj={
        name:"",
        getName:function(){}
    };
  1. 复杂对象(可重用的对象)
    使用new关键字,作用于函数,函数会自动创建一个新的空对象({}),然后用函数中的各种声明填充这个新的对象,最后返回这个新的对象,在此过程中,使用了this关键字,会成为这个对象的公有属性,使用var关键字的因为作用域的关系会成为一个在外部不可访问的属性(私有属性)
    function Ninjia(){
        var name="";//这是一个私有属性
        this.getName=function(){return name};//这是公有的
    }
    var ninjia=new Ninjia();
  1. 有继承关系的对象:使用prototype属性
    所有的函数都有一个prototyoe属性,这是一个指针,默认指向一个空对象 ,只有在函数充当构造器的时候才会有作用
    当函数充当构造器时,使用它产生的实例会有一个constructor的引用,指向产生实例的构造器(也就是函数),构造器拥有一个prototype的属性。所以prototype,也就是原型不是一个对象本身的属性,但是如果一个属性在对象上找不到的话,Javascript会在它的原型上继续寻找,所以对一个对象的扩展属性可以挂载到对象的原型上去。
    这样有一个问题,如果对象本身就有一个属性,而原型上也有同名的属性怎么办?
    javascript默认的搜索属性的方式是从对象到原型,如果原型也有自己的原型的话,就接着找原型的原型,以此类推。因此,在对象和对象的原型上有同名属性的时候,对象本身的属性优先级最高,访问和操作时都是操作的对象本身的属性。
    对象的原型上面除了可以挂载属性之外,还可以直接将对象的原型更改成另一个对象,在这个时候,JS风格的继承就出现了。
    我们可以手动将一个构造器的prototype指向另一个对象,这样就实现了对象的继承
function Father(){}
function Child(){};
Child.prototype=new Father();
//这个时候,Child就通过原型,继承了Father的属性;
//这里不推荐使用Child.prototype=Father.prototype,因为这样会使得Child和Father共享一个原型,Child如果对原型有新的增删的话,就会在Father上也有反映
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值