JavaScript原型

一.原型

1.初识原型

JS中原型是一个很重要的概念,有点类似于java类中的静态变量,这么说也不是很准确。构造函数有个prototype属性,该属性是一个对象叫做原型对象,通过该属性可以为构造函数添加其实属性和方法然后被对象使用。

    //构造函数
    function User(name, age) {
        this.name = name;
        this.age = age;
    }

    //原型中添加属性
    User.prototype.sex = "男";

    //原型中添加方法
    User.prototype.sleep = function () {
        console.log("睡觉~");
    }

    var user = new User("张三", 20);
    console.dir(user);
    console.dir(User);

    console.log(user.sex);// 男
    user.sleep();// 睡觉~

console.dir()语句是输出结构:
在这里插入图片描述
可以看到实例对象user中有age,name属性,还有个User原型,User原型中有构造器constructor,还有我们指定的sex属性和sleep()方法。构造函数中prototype属性,其内容和实例对象中的User原型内容是一致的。由于我使用的是Safari浏览器实例对象中打印的是User原型,在Google浏览器中打印的应该是__proto__。

2.原型的简单写法
    User.prototype = {
        sex: "男",
        sleep: function () {
            console.log("睡觉~");
        }
    }

    var user = new User("张三", 20);
    console.log(user.sex);// 男
    user.sleep();// 睡觉~

相当于通过字面量的方式创建对象。

3.原型对象中方法相互调用
    User.prototype.sleep = function () {
        this.wash();
        console.log("睡觉~")
    }
    User.prototype.wash = function () {
        console.log("洗刷~");
    }
    var user = new User("张三", 20);
    user.sleep();
    //洗刷~
    //睡觉~

在sleep方法中调用wash方法。

4.原型对象和实例对象变量方法重名问题
   function User(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    //原型中添加属性
    User.prototype.sex = "男";
    var user = new User("张三", 20, "女");
    console.log(user.sex);//女

因此构造函数中如果存在某个变量,会使用构造函数中的变量,如果没有才会去原型中去找。

5.为内置对象添加原型方法
    var array = new Array(1, 2, 3, 4, 5, 6);
    Array.prototype.getLast=function () {
        return this[this.length-1];
    }
    console.log(array.getLast());//6

为数组Array添加了一个getLast的方法。

6.原型的好处

未完待续…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值