zoukankan      html  css  js  c++  java
  • js基础(原型)

     

    function fun(){
              alert(this.name);
    };
    function Person(name , age , gender){
              this.name = name;
              this.age = age;
              this.gender = gender;
              //向对象中添加一个方法
              this.sayName = fun;
     }

    //每次创建对象都会新建一个sayName方法,而且是不一样的,这样完全没有必要,可以所有的对象共享同一个方法

    //将sayName方法定义在全局中,污染了全局的作用域的命名空间,而且定义在全局作用域中也不安全

     

     

    我们创建的每一个函数,解析器都会向函数添加一个属性prototype,这个属性对应一个对象,这个对象就是我们的原型对象

    如果函数作为普通函数调用prototype没有任何作用,当函数以构造函数的形式调用,它所创建的对象都会有一个隐含的属性,指向该构造函数的原型对象,可以通过__proto__来访问属性

    原型对象就相当于一个公共区域,所有同一个类的实例都可以访问这个原型对象,我们可以将对象中公共的内容设置到原型对象中

    当我们访问对象的一个属性或者方法时候,它会在对象自身中寻找,如果有则直接使用,如果没有,则会去原型对象中寻找,如果找到则使用

    创建构造函数时候,可以将这些对象共有的属性或者方法,统一添加到构造函数的原型对象中,使每个对象都具有这些属性和方法

    function Person(name , age , gender){
              this.name = name;
              this.age = age;
              this.gender = gender;
              //向对象中添加一个方法
              //this.sayName = fun;
     }
    
    var person = new Person();
    console.log(person.__proto__); //{constructor: ƒ}
    console.log(Person.prototype); //{constructor: ƒ}
    console.log(person.__proto__ == Person.prototype); //true
    // person.sayName();//报错
    Person.prototype.sayName = function (argument) {
              alert("success");
    }
     
    var obj = new Person();                   
    //obj.sayName();
    console.log(obj);
    console.log("sayName" in obj);//true
    console.log(obj.hasOwnProperty("name"));//true
    console.log(obj.hasOwnProperty("hasOwnProperty"));//false
    console.log(obj.__proto__.hasOwnProperty("hasOwnProperty"));//false
    console.log(obj.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));//true

    原型对象也是对象,所以它也有原型

    当我们使用一个对象的属性或者方法的时候,会在自身中寻找,如果没有则去原型中寻找,如果没有则到原型的原型去寻找,直到Object对象,则返回undefined

     

    当直接在页面打印一个对象时候,实际上输出的是该对象的toString()方法的返回值,可以添加一个toString()

            function Person(name, age) {
                        // body...
                        this.name = name;
                        this.age = age;
              }
    
              Person.prototype.toString = function(){
                        return "Person[name='"+this.name+", age = "+this.age+"']";
              }
              var person = new Person("Tom", 78);
              person.toString = function(argument) {
                        return this.name + "====" + this.age;
              }
              console.log(person);
              console.log(new Person());

    垃圾回收:

    当一个对象没有任何的变量或者属性对它进行引用的时候,此时我们将无法操作该对象,此时的对象就是一个垃圾

    js中有自动的垃圾回收机制,会自动将这些垃圾进行销毁,因此我们不需要进行垃圾回收,我们要做的就是将不再使用的对象赋值为null

      

     

        

  • 相关阅读:
    ORA-01157:无法标识/锁定数据文件,ORA-01110:表空间丢失错误
    Oracle ORA-01033: ORACLE initialization or shutdown in progress
    mysql delete语句不能用别名
    内存溢出
    中间件-RocketMQ-启动
    rz上传文件乱码
    字节码解读(转~谨用作记录)
    java字节码指令列表(转)
    idea打jar包,提示 jar包中没有主清单属性
    MYSQL 查看最大连接数和修改最大连接数
  • 原文地址:https://www.cnblogs.com/lzb0803/p/9016764.html
Copyright © 2011-2022 走看看