面向对象是把实现问题的方法看成对象,是实际存在的一个事物。类是对象的抽象,对象是类的实例。JS中没有类的概念,JS中称为原型,也是对象,相比类,原型可以动态操作该对象的属性和方法.
通过构造函数<用来产生对象>,创建对象.
<script>
//定义一个对象
function People(name,age){
//属性
this.name = name;
this.age = age;
//一个方法
this.run = function(){
alert(this.name + "paopaoapo");
}
}
People.prototype.qq="12345";//给People原型添加属性qq
var p1=new People("小明",18);//存储的内存地址
p1.age=25;
var p2=new People("小明2",19);//p1、p2是两个不同对象 来自同一个原型
p1.sex="男";
alert(p1.name + " " + p1.age +" " + p1.sex+" "+p1.qq+" " +p2.name + " "
+ p2.age+" " + p2.sex+" "+p2.qq);
p1.run();
p2.run();
</script>
JS是没有类的,所以继承的实现我们可以用一下方法实现:
function Man(name,age){
this.fight="PK";
//调用父类的构造函数传参《不需要传参数就可以不用》
this.constructor(name,age);
//对象冒充法一
// this.inherit = People;//模拟继承 调用People函数
// this.inherit(name,age);//执行People
// delete this.inherit;//删除inherit属性
//对象冒充法二
// People.call(this,name,age);//this表示Man对象
//对象冒充法三
// People.apply(this,[name,age]);//this表示Man对象,和call不一样的是传参数方式
//
}
Man.prototype = new People();//Man的prototype<原型>为People 真实继承 原型链
var m1=new Man("大胖",56);
// m1.run();
console.log(m1);
// console.log(m1 instanceof Man);//对象冒充法一二三 真实继承为true
console.log(m1.constructor);
// 打出function People(name,age){
// //属性
// this.name = name;
// this.age = age;
// //一个方法
// this.run = function(){
// alert(this.name + "paopaoapo");
// }
// }
console.log(m1 instanceof People); //对象冒充法一二三为false 真实继承为true
// console.log(m1.__proto__.__proto__.__proto__.__proto__);//__proto__和prototype一样的
原文:http://www.cnblogs.com/yttbbd/p/4805618.html