03学习 JS面向对象笔记 义美

------------------------------

1.原型 (prototypr 原型属性)

2.继承


3.原型链


----------------------------------


prototypr 原型属性


constructor 构造函数


----------------------------------

prototypr 原型属性

为什么使用原型? 原型可以达到继承的目的


function Person(){

};
Person.prototype.name = 'shaozhu';
Person.prototype.age = 22;
Person.prototype.action = function(){
console.log(this.name);
}

var person1 = new Person();//实例化 可以享有里面的所有属性和方法

person1.name

Person {}

//我们如果打印出person1 看看会是什么

console.log(person1);

//发现有一个 __proto__ 没错 我们如果要取原型里面的东西 就要用这个来取值


原型的好处 相同的存在原型里面 不相同的把它独立出来

----------------------------------

例子 修改实例的属性 不影响其他实例的属性

function Person(){

};

Person.prototype.name = 'shaozhu';

Person.prototype.age = 22;

Person.prototype.action = function(){

consloe.log(this.name);

}


var person1 = new Person();

person1.name='ben';

var person2 = new Person();

person2.name;


"shaozhu"

----------------------------------


修改原型的属性后 所有的实例化的对象都会跟着修改

修改原型属性例子:

function Person(){

};

Person.prototype.name = 'sonia';

Person.prototype.age = 22;

Person.prototype.action = function(){

consloe.log(this.name);

}


var person1 = new Person();

person1.__proto__.name='ben';//修改原型
var person2 = new Person();

person2.name;


"ben"

注意:一个属性 如果原型定义了 实例也定义了 实例的 先从实例找 然后再从原型找

--------------------------------------------------------------------

检测 一个实例是否属于这个原型


function Person(){

};

Person.prototype.name = 'shaozhu';

Person.prototype.age = 22;

Person.prototype.action = function(){

consloe.log(this.name);

}

var person1 = new Person();

person1.__proto__.name='ben';//修改原型

var person2 = new Person();


Person.prototype.isPrototypeOf(person1)//检测 返回布尔


大型项目 原型封装用的比较的多

----------------------------------


构造函数和原型 混合使用

function Aa(name,age){
this.name = name;
this.age = age;
}
Aa.prototype.action = function(){//构造函数里面的一个方法 用原型声明 这个方法可以减少所占的资源 原型
return this.name;
}
var aa = new Aa("qqq",22);

var bb =new Aa("www",23);

console.log(aa.action());//调用

bb.action()


"www"

----------------------------------
例子:

function Aa(name,age,hobby){
this.name = name;
this.age = age;
this.hobby = hobby;
}
Aa.prototype.action = function(){//构造函数里面的一个方法 用原型声明 这个方法可以减少所占的资源
return "名字:"+this.name+",年龄:"+this.age+",爱好:"+this.hoboy;
}
var aa = new Aa("qqq",22,'写代码');

var bb =new Aa("www",23,'搭讪');

console.log(aa.action());

名字:qqq,年龄:22,爱好:写代码


console.log(bb.action());

名字:www,年龄:23,爱好:搭讪


----------------------------------

公共的可以放在原型里面 这个效果更高!!! 比如 action();

如果公共的不使用原型 多次的实例化之后 可能会出现内存的溢出!!


----------------------------------

继承 !!!!!


继承有两种:接口继承 实现继承(js 只支持这个!)


function Action(){};

Action.prototype.caDo = function(){
console.log('吃饭 睡觉');
}

function Ben(){};

Ben.prototype = new Action();//继承 全部都继承了

var aa = new Ben();//实例化 Ben

aa.caDo();


吃饭 睡觉

先从实例里面找 实例里面没有 然后到原型里面去找

----------------------------------


原型链 继承和继承之间产生的关系链


delete 不能删除继承的东西


person1.__proto__.name='ben';//修改原型

总结:原型里面放公用的 继承 可以提高效率

原文地址:https://www.cnblogs.com/shaozhu520/p/8470087.html