Javascript OOP之面向对象(2)

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)); // 1 console.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'});

方法重写

function F(){} var f = new F(); F.prototype.run = function(){ console.log('F'); } f.run(); // F f.run = function(){ console.log('fff'); } f.run(); // fff

抽象类

在构造器中 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__: LinkDetector l.detect(); //Detection starting... l.init(); //Uncaught Error: Error

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzxszf.html