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.
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java集合容器面试题(2020最新版)「建议收藏」

    Java集合容器面试题(2020最新版)「建议收藏」文章目录集合容器概述什么是集合集合的特点集合和数组的区别使用集合框架的好处常用的集合类有哪些?List,Set,Map三者的区别?List、Set、Map是否继承自Collection接口?List、Map、Set三个接口存取元素时,各有什么特点?集合框架底层数据结构哪些集合类是线程安全的?Java集合的快速失败机制“fail-fast”?怎么确保一个集合不能被修改?Collection…

    2022年6月14日
    26
  • oracle提示表名无效,ORACLE提示表名无效「建议收藏」

    oracle提示表名无效,ORACLE提示表名无效「建议收藏」在创建ORACLE数据库时,创建表提示表名无效请查看数据库表名是否出现了小写字母或者关键字,如USER…[问题描述]在使用SQLServer2008r2时,有时在完成SQL书写后,会提示“对象名无效”,而SQL语句可正常执行.[原因]缓存相关.[解决方法]ctrl+shift+R刷新下,问题一般即得到解决.…有这样一个现象,在DB2安装后,使用db2icrt来创建实例时,提示…

    2022年5月13日
    50
  • socket粘包解决方案_socket 传输文件

    socket粘包解决方案_socket 传输文件一 .两个简单概念长连接与短连接:1.长连接   Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接   Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.二 ….

    2022年8月18日
    7
  • Oracle新建索引、删除索引和查看索引

    Oracle新建索引、删除索引和查看索引1、创建索引createindex索引名on表名(列名);2、删除索引dropindex索引名;3、创建组合索引createindex索引名on表名(列名1,列名2,列名3,…);查看目标表中已添加的索引–在数据库中查找表名select*fromuser_tableswheretable_namelike‘tablename%’;–查看该表的所有索引select*fromall_indexeswheretable_name=‘tablen

    2025年9月1日
    3
  • listlength函数头文件_length函数

    listlength函数头文件_length函数length函数系统默认用户浏览8778请教MySQL高手:“length()”函数与“char_length()”函数的区别是什么?高手,您好:小弟的提问如题。希望高手能够为小弟举出一个能够展示length()函数与char_length()函数区别的例子。并且配合两个函数的作用机理,为小弟做一下这两个函数区别的讲解。谢谢…高手,您好:小弟的提问如题。希望高手能够为小弟举出一个能够展示le…

    2022年6月14日
    29
  • 最新http代理服务器地址0908[通俗易懂]

    最新http代理服务器地址0908[通俗易懂]IP:PortTypeSpeedCountry/Area206.206.88.6:80HTTP296,609,2015美国WestNet211.239.84.205:80HTTP156,1078,1078Korea212.116.219.54:8082HTTP703…

    2022年9月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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