• javascript中的原型对象


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        
        <script type="text/javascript">
            // 原型
            // 构造函数的prototype属性的值
            function Person() {
                this.name = "adfs";
            }
            // 访问原型:
            // console.log(Person.prototype);
    
            // 给原型添加的方法
            Person.prototype.say = function() {
                // console.log("这事原型的方法");
                console.log(this.name);
            };
            Person.prototype.name = "aaaaaaa";
    
            // 表示非公开的方法, 可以使用,但是 可能存在问题
            // Person.prototype._init = function() {};
    
            // 通过构造函数来创建对象
            var p = new Person();
            // 通过p这个实例,来访问到原型中的方法或者是属性
            p.say();
            Person.prototype.say();
    
            // 以下两种方式调用的区别:
            // p.say();
            // Person.prototype.say();
            // 
            // 1 通过对象来调用方法是 通过属性搜索原则找到的方法,然后再调用
            // 2 直接访问到方法,然后再调用的
            // 3 方法内部的 this 指向不同
            //         方法内部的this :谁调用的方法,this就是指向谁
    
            // __proto__
            // 还可以通过通向直接访问到原型
            // 只要是带有 __ 就表示非标准的属性, 不能不再实际项目中使用
            // 有些框架中写的方法的名字也带有下划线: 
            //         表示这些方法是再框架内部使用的
            //         如果,你拿来使用,出问题了,框架不负责
            // p.__proto__
            console.log(Person.prototype === p.__proto__); // true
    
            // 构造函数的prototype属性 和 对象的__proto__表示的就是同一个对象
            // 只不过是 通过不同的方法来访问这个对象(原型)
            p.__proto__.say();
            // console.log(p.__proto__);
    
            // 两个术语:
            // prototype 原型属性
            // __proto__ 原型对象
    
            // 就好比是 o1和o2是两个变量,但是这两个变量就是同一个对象
            // var o1 = {};
            // var o2 = o1;
        </script>
    </body>
    </html>
  • 相关阅读:
    【LeetCode】Hash
    【LeetCode】Heap
    【LeetCode】Stack
    【CodeVS】 纯OI题
    【LeetCode】String
    【LeetCode】Array
    WinForm窗体 常用属性
    C# ADO.NET 实体类中的属性扩展
    C# ADO.NET 三层架构
    C# ADO.NET 数据库的安全(sql 字符串注入攻击、使用占位符防止注入攻击)
  • 原文地址:https://www.cnblogs.com/lsy0403/p/5928967.html
Copyright © 2020-2023  润新知