function Person(name , age , sex){ this.name = name ; this.age = age ; this.sex = sex ; this.show = function (){ console.log( this.age + "========"+ this.sex ); } } function Student(name , age , sex , score){ this.score = score ; Person.apply(this,[name , age , sex]); } function Worker(name , age , sex , job){ this.job = job ; Person.call(this,name , age , sex); } Dancer.prototype = new Person('Sunshine',18,'女'); function Dancer(salary ){ this.salary = salary ; } var student = new Student('Sunshine',18,'女',100); var worker = new Worker('Sunshine',18,'女','IT'); var dancer = new Dancer(20000); console.log(student); console.log(worker); console.log(dancer);
最终的结果如下:
当然,个人感觉那个prototype没有说的很好,如果看到这篇博客的你有更好的建议或意见的话,欢迎给我留言。还有call和apply,其实它们的作用是一样的,都是改变this指向,然后它们的区别也可以从代码中看出,传参方式不同。
多态
最后要说多态了,写这篇文章之前,自己对多态还是处于懵逼的状态,查阅了不少其他同行的博客,以及W3C 上的解释,把这些总结了一下,多态就是在执行同一操作且作用于不同对象时,返回不同的结果 。其实也就是把做什么和由谁去做分开,这样使得代码更容易维护,且条例清晰。直接上例子吧:
function dwn(s){ document.write(s+"<br/>"); } function Animal(){ this.bite=function(){ dwn("animal bite!"); } } function Cat(){ this.bite=function(){ dwn("Cat bite!"); } } Cat.prototype=new Animal(); ///inherit Animal function Dog(){ this.bite=function(){ dwn("Dog bite"); } } Dog.prototype=new Animal(); ///inherit Animal function AnimalBite(animal){ if(animal instanceof Animal) //这里是判断animal的原型是否指向Animal animal.bite(); } var cat = new Cat(); var dog = new Dog(); AnimalBite(cat); AnimalBite(dog); //最终输出的结果如下: /* Cat bite! Dog bite */
终于写完了,如果以上有错误的话,欢迎指出~
以上就是Javascript基于对象三大特性,希望对大家的学习有所帮助。
您可能感兴趣的文章: