JS中的对象 (1)-创建对象

      学过Java的小伙伴都知道,有对象那一定有类,因为类是对象的模板,对象是类的实例。Java中的面向对象的思想已经很成熟了,我们来看一下在JS中能不能做到像Java那样面向对象编程。

1.Java中创建对象

//创建类
public class Dog(){
    private String name;
    private String type;
    public Dog(String name,String type){
        this.name = name;
        this.type = type;
    }
    public String introduce(){
        return name + "的种类是" + type;
    }
}
//创建对象
Dog dog1 = new Dog("菲菲","中华田园犬");
Dog dog2 = new Dog("可可","金毛");

1-1创建对象的步骤 

1.new    //创建对象的关键字
2.Dog("菲菲","中华田园犬");    //构造函数的调用

JS里面是没有类这个概念的,那么对象又是如何创建的呢?庆幸的是,虽然JS中没有类这个概念,但是JS中有构造函数这个概念。现在我们就用构造函数创建一个对象。

2.JS中创建对象

//构造函数
function Dog(name,type){
    this.name = name;
    this.type = type;
    this.introduce = function(){
        return this.name + "的种类是" + this.type;
    }
}
//创建对象
var dog1 = new Dog('菲菲','中华田园犬');
var dog2 = new Dog('可可','金毛');

    由于我们对Java中面向对象的思想印象深刻,所以我们想象的JS中的对象应该也像Java中的对象一样,事实真的如此吗?

3.对比Java与JS中的对象

仔细观察就会发现:

    JS中的构造函数中把方法也包括进来了,这个在Java中并没有。

    1.学过Java的都知道this表示对象指针,既然Java中没有this.introduce,是不是说introduce方法不属于某一个对象呢?准确的来说并没有错,因为它是所有Dog类的实例化对象共享的。

JS中的对象 (1)-创建对象_第1张图片

    2.反过来看JS,很明显introduce方法属于对象,dog1、dog2、dog3、...dog100都有这样一块内存区域保存着这个方法。

JS中的对象 (1)-创建对象_第2张图片

4.ES6语法(最新)中的JS对象

//创建类
class Dog{
  constructor(name,type){
    this.name = name;
    this.type = type;
    this.introduce = function(){
        return this.name +"的种类是"+ this.type
    };
  };
};
//创建对象
var dog1 = new Dog('菲菲','中华田园犬');
var dog2 = new Dog('可可','金毛');

    ES6中出现了class关键字与constructor(构造函数),与Java的相似度更高了,理解起来也更容易了。

 

5.总结

    在JS中把这种属于对象的方法与属性(this指向的)称为自有属性。

    从内存的角度来说:在Java中,属性是属于对象的,而方法是同一个类的所有对象共享的;但是在JS中,无论是属性还是方法都是属于对象的。

    大家可能会问到,JS能不能做到像Java一样的,是可以的,这就需要借用原型方法。

注释:后续所有关于JS中面向对象的论述都会与Java中的面向对象进行对比。

 

你可能感兴趣的:(JS面向对象)