js对象(2)「建议收藏」

js对象(2)「建议收藏」1.JavaScript原型如果所有对象都有私有字段[[prototype]],就是对象的原型;读一个属性,如果对象本身没有,则会继续访问对象的原型,直到原型为空或者找到为止。操作原型的三种方法:Object.create根据指定的原型创建新对象,原型可以是null;Object.getPrototypeOf获得一个对象的原型;Object.setPrototypeOf设置一个对象的原型。varcat={say(){

大家好,又见面了,我是你们的朋友全栈君。

1 . JavaScript原型
如果所有对象都有私有字段[[prototype]],就是对象的原型;
读一个属性,如果对象本身没有,则会继续访问对象的原型,直到原型为空或者找到为止。

操作原型的三种方法:
    Object.create 根据指定的原型创建新对象,原型可以是 null;
    Object.getPrototypeOf 获得一个对象的原型;
    Object.setPrototypeOf 设置一个对象的原型。

    var cat = {
        say(){
            console.log("meow~");
        },
        jump(){
            console.log("jump");
        }
    }
    var tiger = Object.create(cat,  {
        say:{
            writable:true,
            configurable:true,
            enumerable:true,
            value:function(){
                console.log("roar!");
            }
        }
    })
    var anotherCat = Object.create(cat);
    anotherCat.say();
    var anotherTiger = Object.create(tiger);
    anotherTiger.say();

new运算接收一个构造器和一组调用参数:
    以构造器的 prototype 属性(注意与私有字段[[prototype]]的区分)为原型,创建新对象;
    将 this 和调用参数传给构造器,执行;
    如果构造器返回的是对象,则返回,否则返回第一步创建的对象。

    用构造器模拟类的两种方法( 旧版本 ):

        function c1(){
            this.p1 = 1;
            this.p2 = function(){
                console.log(this.p1);
            }
        }
        var o1 = new c1;
        o1.p2();



        function c2(){
        }
        c2.prototype.p1 = 1;
        c2.prototype.p2 = function(){
            console.log(this.p1);
        }

        var o2 = new c2;
        o2.p2();


    第一种方法是直接在构造器中修改 this,给 this 添加属性。
    第二种方法是修改构造器的 prototype 属性指向的对象,它是从这个构造器构造出来的所有对象的原型。
  1. ES6中的类
    基本写法:

     class Rectangle {
       constructor(height, width) {
         this.height = height;
         this.width = width;
       }
       // Getter
       get area() {
         return this.calcArea();
       }
       // Method
       calcArea() {
         return this.height * this.width;
       }
     }
    

    类的继承:

     class Animal {
       constructor(name) {
         this.name = name;
       }
    
       speak() {
         console.log(this.name + ' makes a noise.');
       }
     }
    
     class Dog extends Animal {
       constructor(name) {
         super(name); // call the super class constructor and pass in the name parameter
       }
    
       speak() {
         console.log(this.name + ' barks.');
       }
     }
    
     let d = new Dog('Mitzie');
     d.speak(); // Mitzie barks.
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163391.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Hibernate知识点总结

    Hibernate知识点总结

    2021年11月29日
  • zabbix监控jmx

    zabbix监控jmx背景:目前公司用的主要语言就是java,然后在运维过程中会遇到频繁的内存溢出的情况,之前使用过elk日志分析系统可以实时的判断出内存溢出的情况,但是无法查看内存的使用情况,只能通过dump文件查看内存溢出的时候dump下来的文件去分析。这样也无法准确的判断出问题。zabbix可以监控java,并且将内存的使用情况实时的展现出来,这是一个不错的选择。JMX的全称是JavaManagement…

  • pytest skipif_pytest不是内部或外部命令

    pytest skipif_pytest不是内部或外部命令前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

  • 外层循环和内层循环的关系_内层电子跃迁与外层电子跃迁

    外层循环和内层循环的关系_内层电子跃迁与外层电子跃迁解决eleui外层表格可以全选内层表格问题之前做项目发现外层表格全选时候想全选内层表格,有用过toggleRowSelection,但是发现内层表格未打开时,无法触发内层表格的ref,所以我找了别的解决方法。<el-table-columnwidth=”20″><templateslot-scope=”scope”><divv-if=”scope.row.quantity==0″@click=ch

    2022年10月29日
  • Ubuntu18.04安装Anaconda+PyCharm+VS Code[通俗易懂]

    Ubuntu18.04安装Anaconda+PyCharm+VS Code[通俗易懂]PyCharm安装、桌面快捷方式建立及设置中文输入

  • 常用hook机制_hook so层

    常用hook机制_hook so层SSDTHook技术详解与应用SSDTHook技术详解与应用一SSDT简介1什么是SSDT2SSDT结构3应用层调用Win32API的完整执行流程二SSDTHook原理1SSDTHook原理简介2进程隐藏与保护3文件隐藏与保护4端口隐藏一、SSDT简介1、什么是SSDT​SSDT的全称是SystemServicesDescriptorTable,系统服

    2022年10月24日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号