前言
我要面向对象!!
我要面向对象!!
正文
要去学校了,废话不多说,今天来讲讲Javascript的“类”与“面向对象”
方法1
首先我们要知道,JS是没有类的!!
但由于函数式语言的“函数是第一等公民”理论,可以创建一个“类类”(类似类的函数)
所以不难得出
function Student(name) {
//构造函数法
//MEMBER_DATA
this.name=name;
//MEMBER_FUNCTION
this.getName=function(){return this.name;}
this.setName=function(name){this.name=name;}
}
保存+运行
问题不大啦~(这张图也表明new才能创建对象)
但!是!
这个Student 包括了他的两个成员函数。假设一个成员函数占1byte,1024个就是1kb.这怎么能忍?
于是,我们请出了我们的Prototype kun
Prototype之术
众所周知,c++的成员函数就是这样:(这样只分配一个成员函数的内存)
a.foo(); // = foo(&a)
而Javascript也可以用类似的方法实现,就是prototype。这也就是实现成员函数的“标准方式”
function Student(name) {
//构造函数法
//MEMBER_DATA
this.name=name;
//MEMBER_FUNCTION
Student.prototype.getName=function(){return this.name;}
Student.prototype.setName=function(name){this.name=name;}
}
结果(不截图,懒)
Welcome to Node.js v14.16.0.
Type ".help" for more information.
> function Student(name) {
... //构造函数法
... //MEMBER_DATA
... this.name=name;
... //MEMBER_FUNCTION
... Student.prototype.getName=function(){return this.name;}
... Student.prototype.setName=function(name){this.name=name;}
... }
undefined
> var a=new Student("Hux")
undefined
> aa
Uncaught ReferenceError: aa is not defined
> a
Student { name: 'Hux' }
> a.getName
[Function (anonymous)]
> a.getName()
'Hux'
> a.setName("Zhongchuxi")
undefined
> a.getName
[Function (anonymous)]
> a.getName()
'Zhongchuxi'
距离开学还有2 5/12小时。
- Post link: https://aimo-hux.github.io/jvscript-class.html
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
GitHub Issues