js面向对象实现方式的演变及常用方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js面向对象实现方式的演变及常用方法相关的知识,希望对你有一定的参考价值。
面向对象三大特性:封装,继承,多态。
1.原始模式
var obj = new Object(); obj.name = name; obj.sex = sex;
obj.showName = function(){
alert("我的名字叫"+this.name)
}
obj.showSex ......
var Cat = {} 也可以用json的方式创建 原理相同
2.工厂模式
容易理解版
function createPerson(name,sex){
// 原料
var obj = new Object();
//加工
obj.name = name;
obj.sex = sex;
obj.showName= function(){
alert(‘我的名字叫‘+this.name);
}
//出厂
}
json版
function Cat(name,color){
return {
name: name,
color: color,
showNamr: function(){
alert(‘我的名字叫‘+this.name);
}
}
}
缺点:没有new,创建多个副本,代码不够简洁
3.构造函数模式
function Cat(name,color){
this.name = name;
this.color = color;
}
var cat1 = new Cat("大象","黄毛");
new的作用:1.系统自动创建一个对象 2.将内部的this指向这个创建的对象 3.返回这个对象
缺点:依旧创建多个副本浪费内存资源
4.原型模式(混合法)
function Cat(name,colot){
this.name = name;
this.color = color;
}
Cat.prototype.type = " 猫科动物";
Cat.prototype.eat = function(){
alert("吃老鼠");
}
问题注意
alert(cat1.eat == cat2.eat); //true
type和eat就指向同一块内存区域了
Cat即是类也是构造函数在js里是部分家的
构造函数首字母大写
原型上方法属性和实例行间赋予的方法属性 行间优先级较高会替换原型上的方法属性
5.面向对象常用到的方法
prototype 属性使您有能力向对象添加属性和方法(也就就是java中的类的方法)
constructor: 返回此对象创造它的函数的引用(构造函数)
instanceof: 判断对象是不是 一个构造函数的实例
isPrototypeOf() 判断prototype对象和实例之间的关系
Cat.prototype.isPrototypeOf(cat1);
hasOwnProperty() 判断属性是行间本地属性还是 集成prototype
cat1.hasOwnProperty(‘name‘)属于自己返回true
in 判断是否包含某个属性 不管是本地还是原型上
“name” in cat1
in 用来遍历所有属性
以上是关于js面向对象实现方式的演变及常用方法的主要内容,如果未能解决你的问题,请参考以下文章