js 继承

演示模式

var proto={
    describe:function(){
        return 'name'+this.name
    }
};

var obj={
    [[Prototype]]:proto;
    name:'Jane'
}

实际办法

var proto={
    describe:function(){
        return 'name'+this.name
    }
};
var obj=Object.create(proto)
obj.name='Jane';
obj.describe()//"nameJane"

检查一个对象是否是另一个对象的原型

var A={};
var B=Object.create(A);
var C=Object.create(B);
A.isPrototypeOf(C)//true
C.isPrototypeOf(A)//false
B.isPrototypeOf(A)//false
A.isPrototypeOf(B)//true

设置和删除仅影响自身属性

var proto={foo:'a'}
var obj=Object.create(proto);
obj.foo//"a"
obj.hasOwnProperty('foo')//false
obj.foo='b';//"b"
obj.foo//"b"
obj.hasOwnProperty('foo')//true
proto.foo//"a"
var proto={foo:'a'}
var obj=Object.create(proto);
delete obj.foo//true
obj.foo//"a"

遍历属性

var proto={foo:'a'}
var obj=Object.create(proto);
obj.name='jane';
Object.getOwnPropertyNames(obj)//["name"]
Object.keys(obj)//["name"]
for (var key in obj){
    console.log(key)}
VM13345:2 name
VM13345:2 foo

覆写

var proto={
    describe:function(){
        return 'name'+this.name
    }
};
var obj=Object.create(proto)
obj.name='Jane';
obj.describe=function(){
    return 'overwrite'
}
obj.describe()//"overwrite"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • js 继承和原型链 js 是一个让习惯于使用面向类(class 例如java or c++)的开发者困惑的语言,...
    小a草阅读 610评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 继承大致分为两类: ——基于构造器工作模式 ——基于对象模式 1、原型链法(仿传统)——使用原...
    CollinHsu阅读 344评论 0 0
  • 对象冒充 构造函数使用this关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,...
    bestvist阅读 402评论 0 1
  • Q&A: 1. 继承有什么作用? 概念:继承是指一个对象直接使用另一个对象的属性和方法。 作用:继承划分了类的层次...
    进击的阿群阅读 600评论 0 1