zoukankan      html  css  js  c++  java
  • 关于JS 原型语法

    • 原型语法

      function Student(name,id){
                  this.name = name;
                  this.id = id;
              }
      
              //获取对象的prototype
              Student.prototype.type = "student";
              Student.prototype.message = function(){
                  console.log(this.name + "," + this.id);
              };
              //生成实例对象
              var student1 = new Student("li",111);
      
      

      直接使用一个对象字面量对原型对象进行赋值

      Student.prototype = {
           type : "student",
           message : function(){
               console.log(this.name + "," + this.id);
           }
      };
      //可以正常调用
      student1.message();
      
      

      但是,需要注意有一点,student1.constructor的指向已经发生了改变,因为Student的prototype已经被重置了,constructor的指向找不到,student1.constructor的值就变成了Object了。

      解决这一问题,很简单,就是在给Student.prototrpe的字面量对象赋值时,需要手动的将constructor属性指向正确的构造函数。

      constructor : Student //该构造函数是Student
      
      • 在定义构造函数时,使用原型对象时建议根据成员的功能不同,可以分为以下两种进行设置:

          ①私有成员,一般就是非函数成员,放到构造函数中;

          ②共享成员,一般就是函数,放到原型对象种;

        当重置了prototype时,记得修正constructor的指向

    • JS 原生构造函数的原型对象

      • 所有函数都有prototype属性对象

        JavaScript中的内置构造函数也有prototype原型对象属性:

            - Object.prototype

            - Function.prototype

            - Array.prototype

            - String.pprototype

            - Number.protoptype
            ......

        • 扩展数组的原型方法

          直接给原型对象添加一个对象字面量的值是不行的,内置构造函数有其保护机制(所以如下这种代码不允许的)。

          Array.prototype = {
              getSum = function(){
                   var sum = 0;
                   for(var i = 0;i < this.length;i++){
                      sum += this[i];
                   }
                   return sum;
              }  
          };
          console.dir(Array.prototype);
          

          直接使用Array调用prototype给其添加新属性

          Array.prototype.getSum = function(){
                 var sum = 0;
                   for(var i = 0;i < this.length;i++){
                      sum += this[i];
                   }
                   return sum;
          };
          console.dir(Array.prototype);
          

          实际开发中是不允许更改JS原生内置对象。

  • 相关阅读:
    Eclipse常用快捷键
    Kali Linux安装Google中文输入法(只需5步)
    Kali Linux 更新源 操作完整版教程
    Oracle存储过程的异常处理
    Eclipse调试DEBUG时快速查看某个变量的值的快捷键、快速跳转到某行的快捷键
    oracle listagg和wm_concat函数
    ORACLE分页查询SQL语法——最高效的分页
    Mock拦截请求URL返回模板数据
    前端安全之XSS攻击及防御
    Sublime Text3注册码,亲测可用
  • 原文地址:https://www.cnblogs.com/dreamtown/p/14509297.html
Copyright © 2011-2022 走看看