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)


相关推荐

  • headless CMS_model view controller

    headless CMS_model view controller目录介绍HeadlessCMS什么是HeadlessCMS?HeadlessCMS的优点HeadlessCMS解决方案的局限性使用HCMS的缺点HCMS的局限性何时何地使用HeadlessCMS?RawCMS:构建自己的HeadlessCMS为什么另一个HeadlessCMS?RawCms特征选择架构服务层认证Lambda表…

  • android onresume时view,android – 当对话框出现时不调用OnResume[通俗易懂]

    android onresume时view,android – 当对话框出现时不调用OnResume[通俗易懂]Anactivitycanfrequentlytransitioninandoutoftheforeground—forexample,onPause()iscalledwhenthedevicegoestosleeporwhenadialogappears.我有一个带按钮的活动.当我点击按钮时会出现一个对话框.我期望在对话框出现时调用onPause方…

  • redis之淘汰策略和删除策略_局部淘汰策略

    redis之淘汰策略和删除策略_局部淘汰策略redis内存不足时的淘汰策略一般情况下,当内存超出物理内存限制时,内存数据将与磁盘产生频繁交换(swap),swap会导致redis性能急剧下降,对于访问量较大的情况下,swap的存取效率会让服务基本处于不可用的状态。在生产环境中,一般不允许redis出现swap行为,redis提供了maxmemory设置其最多可占用的内存空间。当redis使用的内存超出maxmemory时,此时已经没有多余可用的内存空间,新的数据将无法写入,redis提供了几种数据淘汰策略,用于清理数据,腾出空间以继续

    2022年10月20日
  • 交互式脚本_交互式和脚本式的区别

    交互式脚本_交互式和脚本式的区别带你打开脚本的大门,领略语言之美

  • 如何在idea中打包程序_有趣的打包问题

    如何在idea中打包程序_有趣的打包问题当自己定义的配置文件在Maven工程的“main”文件夹外时,打包后运行会发现配置文件没有起作用,是因为在IDEA中打包时仅打包“main”文件夹下“java”和“resource”文件夹中的文件…

  • 前端项目开发经验总结(持续更新)

    前端项目开发经验总结(持续更新)这篇博客是我在持续的开发以及维护项目中遇到的坑,并总结出做法,以备需要立项新项目需要注意的点。1.字符串一定能提到语言包中就提到语言包,不要贪图方便写死在代码中或者写死在美术资源中很多程序员喜欢贪图方便,在固定不变的字符串直接使用静态文本,代码中根本不去做控制,这样做一是不方便策划对于描述的一个更改,二是如果需要国际化,会造成很多不必要的工作。2.在存在字符串拼接的情况下…

发表回复

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

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