侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130555 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Javascript的面相对象编程

2024-05-16 星期四 / 0 评论 / 0 点赞 / 8 阅读 / 3399 字

对象生成 1. 使用闭包方式模拟对象生成 // Use closure to simulate classfunction CalculatorClosure (name){var id = 1;r

对象生成

   1. 使用闭包方式模拟对象生成

// Use closure to simulate classfunction CalculatorClosure (name){	var id = 1;	return {		plus : function(a, b){			return a + b;		},		minus : function(a, b){			return a - b;		},		setName : function(_name){			name = _name;		},		getName : function(){			return name;		},		getId : function(){			return id;		}	}}//Run the example:var obj = CalculatorClosure("Name");console.log(obj.getName());console.log(obj.minus(2,6));

    代码中可以看到,是通过调用函数返回一个对象。该被返回的对象里有对应属性名的函数,这些函数类似于面向对象语言中pulic作用范围的函数。

    2. 一般生成对象

function CalculatorNormal (name){	this.id = 2;	var battery = 0.99;	function getDisplayBattery(){		return battery * 100 + "%";	}	this.plus = function(a, b){		return a + b;	}	this.minus = function(a, b){		return a - b;	}	this.setName = function(_name){		name = _name;	}	this.getName = function(){		return name;	}	this.getId = function(){		return this.id;	}	this.getBattery = function(display = false){		if(false == display){			return battery;		}else{			return getDisplayBattery();		}	}}//Run examplevar obj = new CalculatorNormal("Air");console.log(obj.getBattery());console.log(obj.getId());console.log(obj.getBattery(true));

    这里凡是带this.的成员变量与函数都是public作用域,反之,则是private作用域。

    3. 通过prototype来实现对象的生成

// class implemented with prototypefunction CalculatorPrototype (name){	this.id = 2;	this.name = name;}(function(){	this.plus = function(a, b){		return a + b;	}	this.minus = function(a, b){		return a - b;	}	this.setName = function(_name){		this.name = _name;	}	this.getName = function(){		return this.name;	}	this.getId = function(){		return id;	}}).call(CalculatorPrototype.prototype);

    因为每次new一个对象时,可以复用成员函数,这里建议采用prototype方式实现对象的生成,可以减少function建立的开销。

 

继承

// class inheritancefunction Employee() {	this.name = "";	this.department = "general";	this.sayHello = function(){		return "Hello!";	}}function Manager() {	Employee.call(this);	this.reports = ["a", "b", "c"];}Manager.prototype = Object.create(Employee.prototype);Manager.prototype.constructor = Manager;//Run examplevar obj = new Manager();console.log(obj.sayHello());console.log(obj instanceof Manager);console.log(obj instanceof Employee);

   以上的例子,采用this定义的成员作用域都为public, 反之,由于闭包特性,则为private作用域,可被所有该方法里所有成员可见,但对闭包外不可见。

 

    由于JS是一种灵活的语言,以上只是简要概述几种面向对象编程的实现方法。若要深入了解Javascript面相对象编程方法,可以访问https://developer.mozilla.org/en-US/docs/Web/JavaScript。

 

广告 广告

评论区