JavaScript——面向对象总结

1.js中定义的类没有父子关系,但这些类都是Object类的子类

js作为一种动态语言,允许自由地为对象增加属性和方法。
当程序为对象的某个不存在的属性赋值时,即可认为时为对象增加属性。

var p={};//定义一个对象,没有任何属性和方法
p.age=30;//为p对象增加age属性
p.info=function(){
    alert("hello");
}//为对象增加info属性,也就是增加了方法

2.对象和关联数组

js中对象本质上是一个关联数组,由一组key-value对组成。
与java中Map对象有所不同的是,js对象中的value不仅可以是值,也可以是函数

当访问到某个js对象的属性时,不仅可以使用obj.xxxx的方式,也可以采用obj[xxx],有时候必须使用这种形式

3.用prototype实现在js中的继承

js虽然也支持类、对象的概念,但没有继承的概念,只能通过一些特殊手段来实现继承

通常不建议在函数定义中直接为函数定义方法,而是采用prototype属性
js中所有类(也就是函数)都有一个prototype属性,如果为js类的prototype属性增加属性和方法,可视为对原有类的扩展。即增加了prototype属性的类继承了原有的类,实现伪继承,并不是产生了一个新的子类。

<script>
function Person(name,age){
    //将局部变量赋值给实例属性name、age
    this.name=name;
    this.age=age;
    }
    Person.prototype.walk=function(){
        alert(this.name+",慢慢地走");
    }
    var p=new Person("ls",20);
    p.walk();
</script>

通过prototype可以对js的内嵌类进行扩展,但一定要将这段代码放在JavaScript脚本的开头,这样内嵌类实例才能有扩展的方法。尽量避免使用,安全性和稳定性不高

<script>
    Array.prototype.indexof=function(obj){`在这里插入代码片`
        //
        var result=-1;
        for(var i=0;i<this.length;i++){
            //
            if(this[i]==obj)
            {
                //
                result=i;
                break;
            }
        }
        return result;
    }
    var arr=[4,5,7,-2];
    alert(arr.indexof(-2));
</script>

4.原型链法继承

在继承“父类”方法上,更占优势。

<script>
    function Person(name,age){
        this.name=name;
        this.age=age;
    }
    Person.prototype.sayHello=function(){
        console.log(this.name+"向您打招呼!");
    }
    var per=new Person("ls",20);
    per.sayHello();//
    function Student(grade){
        this.grade=grade;
    }
    //
    Student.prototype=new Person("未命名",0);

    Student.prototype.intro=function(){
        console.log("%s是个学生,读%d年级",this.name,this.age,this.grade);

    }
    var stu=new Student(5);
    stu.name="sweer";
    stu.sayHello();
    stu.intro();
</script>

Student.prototype=new Person(“未命名”,0); 可以把Person中属性和方法都继承过来,但是在参数值传递的过程中,需要依次进行赋值。

5.对象冒充继承

在继承父类的属性上,更占优势。


function Person(name,age){
    this.name=name;
    this.age=age;
    }
    Person.call(this,name,age);
    Person.apply(this,[name,age]);

原型链法和对象冒充继承二者交替使用,效果更好

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值