前 言
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。面向对象主要专注于有哪一个对象来解决这个问题,编程特点时出现一个个的类,从类中拿到对象,有这个对象去解决具体问题。 对于调用者来说,面向过程需要调用者去实现各种函数。而面向对象,只需要告诉调用者对象中的具体方法的功能, 而不需要调用者了解方法中的实现细节。
而面向过程主要专注于如何去解决一个问题的步骤。编程特点是由一个个的函数去实现每一步的过程步骤,没有类和对象的概念。
1、 生成实例对象的原始模式 |
1.1我们把人看做一个对象,人有"姓名"和"年龄"两个属性。
var Person={ name : "张三", age : "12" }
1.1我们根据这个原型对象的模式,生成两个实例对象。
var Person1= {}; // 创建一个空对象 Person1.name = "张三"; // 按照原型对象的属性赋值 Person1.age= "12"; var Person2= {}; Person2.name = "李四"; Person2.age= "15"; //这就是最简单的封装了,把两个属性封装在一个对象里面。
2、 原始对象模式的改进 |
function Person(name,age) { return { name:name, age:age } } var Person1= Person("张三","12"); var Person2= Person("李四","15");
3、 构造函数 |
构造函数:其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new
运算符,就能生成实例,并且this
变量会绑定在实例对象上。
//人的原型对象 function Person(name,age){ this.name=name; this.age=age; } //生成实例对象 var Person1= new Person("张三","12"); var Person2= new Person("李四","15"); console.log(Person1.name); // 张三 console.log(Person2.age); // 15 //Person1 和 Person2都会有一个constructor属性,返回当前对象的构造函数 console.log(Person1 .constructor == Person); //true console.log(Person2 .constructor == Person); //true //instanceof检测一个对象是不是一个类的实例 console.log(Person1 instanceof Person); //true console.log(Person2 instanceof Person); //true
4、 Prototype模式 |
prototype 属性允许您向对象添加属性和方法,每一个构造函数都有一个prototype
属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。
function Person(name,age){ this.name=name; this.age=15; } Person.prototype.age=12; var zhangsan=new Person("张三"); console.log(zhangsan.age);
编者按
Javascript面向对象是最难的,初学者不容易掌握,可以多多参考参考专门Javascript面向对象的资料,最后,希望各位和小编一起努力,在前端的路上越走越远!