时间:2021-05-28
面向对象程序设计(Object-oriented programming,OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。——维基百科
一般面向对象包含:继承,封装,多态,抽象
对象形式的继承
浅拷贝
从上面的结果看出,浅拷贝的缺陷在于修改了子对象中引用类型的值,会影响到父对象中的值,因为在浅拷贝中对引用类型的拷贝只是拷贝了地址,指向了内存中同一个副本。
深拷贝
利用递归进行深拷贝,这样子对象的修改就不会影响到父对象。
extendDeeply(Person, programer);programer.address.home = 'allin';Person.address.home; // home利用call和apply继承function Parent(){ this.name = "abc"; this.address = {home: "home"};}function Child(){ Parent.call(this); this.language = "js"; }ES5中的Object.create()var p = { name : 'allin'};var obj = Object.create(o);obj.name; // allinObject.create()作为new操作符的替代方案是ES5之后才出来的。我们也可以自己模拟该方法:
//模拟Object.create()方法function myCreate(o){ function F(){}; F.prototype = o; o = new F(); return o;}var p = { name : 'allin'};var obj = myCreate(o);obj.name; // allin目前,各大浏览器的最新版本(包括IE9)都部署了这个方法。如果遇到老式浏览器,可以用下面的代码自行部署。
if (!Object.create) { Object.create = function (o) { function F() {} F.prototype = o; return new F(); }; }类的继承
调用父类方法
封装
命名空间
js是没有命名空间的,因此可以用对象模拟。
var app = {}; // 命名空间app//模块1app.module1 = { name: 'allin', f: function(){ console.log('hi robot'); }};app.module1.name; // "allin"app.module1.f(); // hi robot静态成员
私有与公有
模块化
prop,func 不会被泄露到全局作用域。或者另一种写法,使用 new
moduleA = new function() { var prop = 1; function func() {} this.func = func; this.prop = prop;}多态
模拟方法重载
arguments属性可以取得函数调用的实参个数,可以利用这一点模拟方法的重载。
function demo(a, b ){ console.log(demo.length); // 得到形参个数 console.log(arguments.length); //得到实参个数 console.log(arguments[0]); // 第一个实参 4 console.log(arguments[1]); // 第二个实参 5}demo(4, 5, 6);//实现可变长度实参的相加function add(){ var total = 0; for( var i = arguments.length - 1; i >= 0; i--){ total += arguments[i]; } return total;}console.log(add(1)); // 1console.log(add(1, 2, 3)); // 7// 参数不同的情况function fontSize(){ var ele = document.getElementById('js'); if(arguments.length == 0){ return ele.style.fontSize; }else{ ele.style.fontSize = arguments[0]; }}fontSize(18);console.log(fontSize());// 类型不同的情况function setting(){ var ele = document.getElementById('js'); if(typeof arguments[0] === "object"){ for(var p in arguments[0]){ ele.style[p] = arguments[0][p]; } }else{ ele.style.fontSize = arguments[0]; ele.style.backgroundColor = arguments[1]; }}setting(18, 'red');setting({fontSize:20, backgroundColor: 'green'});方法重写
抽象类
在构造器中 throw new Error(''); 抛异常。这样防止这个类被直接调用。
function DetectorBase() { throw new Error('Abstract class can not be invoked directly!');}DetectorBase.prototype.detect = function() { console.log('Detection starting...');};DetectorBase.prototype.stop = function() { console.log('Detection stopped.');};DetectorBase.prototype.init = function() { throw new Error('Error');};// var d = new DetectorBase();// Uncaught Error: Abstract class can not be invoked directly!function LinkDetector() {}LinkDetector.prototype = Object.create(DetectorBase.prototype);LinkDetector.prototype.constructor = LinkDetector;var l = new LinkDetector();console.log(l); //LinkDetector {}__proto__: LinkDetectorl.detect(); //Detection starting...l.init(); //Uncaught Error: Error声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP学习记录之面向对象(Object-orientedprogramming,OOP)基础。分享给大家供大家参考,具体如下:在面向对象的程序设计
OOP语言使我们有能力自定义对象和变量类型。面向对象编程JavaScript是面向对象的编程语言(OOP)。OOP语言使我们有能力定义自己的对象和变量类型。对象
在本站中已经有很多探讨OOP或面向对象的基本概念的文章,但在这里还要再转载一篇,主要是让大家在各个角度来充分了解OOP或面向对象的概念及OOP或面向对象给我们带
JavaScriptisanObjectOrientedProgramming(OOP)language.JS是面向对象的编程语言(面向对象)。(这里是基于对象
OOP((ObjectOrientedProgramming)是面向对象编程,面向对象编程是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到