欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript系列(10)——JS面向对象基础

程序员文章站 2022-04-03 22:53:23
...

JavaScript中没有类的语法,是用函数闭包(closure)模拟出来的,下面讲解的时候还是用C#中的类、构造函数的概念,JavaScript中String、Date等“类”都被叫做“对象”,挺怪,方便初学者理解,不严谨。JavaScript中声明类(类不是类,是对象):

        function Person(name,age) {
            this.name = name;  //属性。this.name是给Person对象动态定义一个name属性,再通过等号把传递进来的参数name的值赋给这个属性。
            this.age =age;  //属性。同上。
            this.sayHello=function(){  //sayHello是方法,等号后面是匿名方法
              alert("你好,我是"+this.name+",我"+this.age+"岁了");
            }
        }         
        var p1 = new Person("tom",20);
        p1.sayHello();

必须要声明类名,function Person(name,age)可以看做是声明构造函数,Name、Age这些属性也是使用者动态添加的。

var p1 = Person("tom", 30);//不要丢了new,否则就变成调用函数了,p1为undefined。new 相当于创建了函数的一个实例。

附加:

1. 必须要明确的一点:JavaScript不是面向对象的语言。

2. JavaScript命名规范:对象的首字母用大写,方法的首字母用小写。如上面的代码中,Person是对象因此首字母大写,sayHello是方法因此首字母小写。

规范只是一种潜规则,相当于道德,可以不遵守。规则相当于法律,必须遵守。

3.

var p1 = Person("tom", 30);  //Person方法调用匿名函数("tom", 30)的返回值,再把Person方法赋值给变量p1。这里的("tom", 30)匿名方法没有返回值,所以返回undefined,导致这行代码报错。
var p1 = new Person("tom",20);  //创建了一个函数的实例,也叫函数的对象。