ECMAScipt的继承与传统类的继承

94 阅读2分钟

ECMAScipt的继承

In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behaviour. In ECMAScript, the state and methods are carried by objects, while structure, behaviour, and state are all inherited.

  • 下面这段翻译我是用谷歌翻译的。
    通常,在基于类的面向对象的语言中,状态由实例承载,方法由类承载,并且继承仅是结构和行为。 在ECMAScript中,状态和方法由对象承载,而结构,行为和状态都被继承。

我以前也看过这段话,没什么感觉,也没去思考过什么?在4月初去重看ECMASript规范的时候,一看里面有很多概念呀? 状态方法结构行为
方法的定义是这样的:A function that is associated with an object via a property is called a method。 印象中认为对象里面只有属性和方法,而对象是属性的集合,对象能继承什么,对象的表现样式(结构)、行为方法、状态属性?。
结构也能被继承,那如何证明;行为被继承我一下子搞懵了;于是我就查文档有没有说 什么是结构什么,什么是行为,什么是状态等等的概念。但是还是我没找到。

ECMAScript基于原型继承的
  • state 状态 状态就是数据

  • methods 方法

  • structure 结构 结构就是对象包含属性的样式。

//obj对象有两个属性x和y,这个就是对象的结构。
var obj={
    x:1,
    y:function(){
        
    }
}
//obj修改了属性x和y
obj.x=2;
obj.y=function(){
    console.log(this.x);
}
//obj.y(); -->2
var car={name:'car',run:function(){console.log(this.name);}};
var bus=Object.create(car);

// bus.name; --> 继承状态
//bus.run; --> 继承行为
//'name' in car; --> 继承结构
  • behaviour 行为 原来行为是指对象的能力。 那么对象有什么能力呢?比如:调用方法的、被调用的、被别的对象关联等;

看到这是不是和我一样突然有点恍然大悟的感觉。 这些是一个老师帮助我解答的,特别感谢周老师。

我以前从没关注ECMAScript规范,感觉会用些js就可以,只要不会出现什么bug就行。根本不理解原理,出现了bug根本不理解为什么。 通过看ECMAScript规范后,感觉以前出现的一下bug知道为什么了。