设为首页 加入收藏

TOP

浅谈JavaScript的面向对象思想(一)
2017-09-19 14:21:04 】 浏览:6492
Tags:浅谈 JavaScript 面向 对象 思想

面向对象的三大基本特性


封装(把相关的信息(无论数据或方法)存储在对象中的能力)


继承(由另一个类(或多个类)得来类的属性和方法的能力)


多态(一个对象在不同情况下的多种形态)


定义类或对象


第一种:基于Object对象



var person = new Object();
person.name = "Rose";
person.age = 18;
person.getName = function () {
    return this.name;
 };
console.log(person.name);//Rose
console.log(person.getName);//function () {return this.name;}
console.log(person.getName());//Rose
 


缺点:不能创建多个对象。


第二种:基于字面量方式



var person = {
    name : "Rose",
    age : 18 ,
    getName : function () {
        return this.name;
    }
 };
console.log(person.name);//Rose
console.log(person.getName);//function () {return this.name;}
console.log(person.getName());//Rose
 


优点:比较清楚的查找对象包含的属性和方法;


缺点:不能创建多个对象。


第三种:工厂模式


方式一:



function createPerson(name,age) {
    var object = new Object();
    object.name = name;
    object.age = age;
    object.getName = function () {
        return this.name;
    };
    return object;
 }
var person1 = createPerson("Rose",18);
var person2 = createPerson("Jack",20);
console.log(person1.name);//Rose
console.log(person2.name);//Jack
console.log(person1.getName === person2.getName);//false//重复生成函数,为每个对象都创建独立的函数版本
 


优点:可以创建多个对象;


缺点:重复生成函数getName(),为每个对象都创建独立的函数版本。


方式二:



function createPerson(name,age) {
    var object = new Object();
    object.name = name;
    object.age = age;
    object.getName = getName;
    return object;
 }
function getName() {
    return this.name;
 }
var person1 = createPerson("Rose",18);
var person2 = createPerson("Jack",20);
console.log(person1.name);//Rose
console.log(person2.name);//Jack
console.log(person1.getName === person2.getName);//true//共享同一个函数
 


优点:可以创建多个对象;


缺点:从语义上讲,函数getName()不太像是Person对象的方法,辨识度不高。


第四种:构造函数方式


方式一:



function Person(name,age) {
    this.name = name;
    this.age = age;
    this.getName = function () {
        return this.name;
    }
 }
var person1 = new Person("Rose",18);
var person2 = new Person("Jack",20);
console.log(person1.name);//Rose
console.log(person2.name);//Jack
console.log(person1.getName === person2.getName); //false//重复生成函数,为每个对象都创建独立的函数版本
 


优点:可以创建多个对象;


缺点:重复生成函数getName(),为每个对象都创建独立的函数版本。


方式二:



function Person(name,age) {
    this.name = name;
    this.age = age;
    this.getName = getName ;
 }
function getName() {
    return this.name;
 }
var person1 = new Person("Rose",18);
var person2 = new Person("Jack",20);
console.log(person1.name);//Rose
console.log(person2.name);//Jack
console.log(person1.getName === person2.getName); //true//共享同一个函数
 


优点:可以创建多个对象;


缺点:从语义上讲,函数getName()不太像是Person对象的方法,辨识度不高。


第五种:原型方式



function Person() {
 }
Person.prototype.name = 'Rose';
Person.prototype.age = 18;
Person.prototype.getName = function () {
    return this.name;
 };
var person1 = new Person();
var person2 = new Person();
console.log(person1.name);//Rose
console.log(person2.name);//Rose//共享同一个属性
console.log(person1.getName === person2.getName

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java同步锁的正确使用 下一篇JSON字符串与JSON对象的相互转换

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目