Java高级面向对象——原型

来源:互联网 发布:psp模拟器 mac 编辑:程序博客网 时间:2024/05/18 01:48

java高级面向对象——原型

一、获得JavaScript对象的方式
1.var preson = new Object()
2.var preson = {}
3.var preson = {
name : "lzz",
age : 19,
say : function(){
alert(preson.name+preson.age)
}
}
preson.say();
4.工厂模式
function Preson (name,age) {
var p = new Object();
p.name = name;
p.age = age;
p.say = function() {
alert(this.name+this.age)
}
return p;
}
var p1 = Preson("lzz",18);
p1.say();
alert(typeof p1);//类型
5. 构造函数来实现
function Preson (name,age) {
this.name = name;
this.age = age;
this.say = function () {
alert("我的名字是"+this.name+",我的年龄是"+this.age)
}
}
var p1 = new Preson("lzz",18);
p1.say();
注:有这五种方法可以得到JavaScript对象,不过第五种方法是最严谨也是最好的一种方法



封装--Javascript 的原型(prototype) 
因为以上的方法是可以创造对象,可以他们都不是很理想,所以我们可以用prototype的方式来完成创建
例子:
function Eat() {};
Eat.prototype.name = "小涛";
Eat.prototype.color = "pink";
Eat.prototype.say = function() {
alert("我叫"+this.name+",花色是"+this.color)
}
var c1 = new Eat();
c1.say();
var c2= new Eat();
c2.name = "小康";
c2.color = "purple";
c2.say();
在上面我创建了一个名为Eat的函数,在这个函数中使用prototype来添加属性和属性值,并且还可以添加一个为say的方法,这样的方法也就是原型,在我第一次定义了一个c1,此时它并没有被我赋予任何的属性与属性值,所以此时调用say方法,弹出的是原型中的属性和属性值,我又创建了一个c2,我对c2赋予了属性与属性值,所以此时他就直接使用我重新赋予的属性与属性值。
原型是什么?原型是 js 中非常特殊一个对象,当一个函数创建之后,会随之就产生一个原型对象,当通过这个函数的构造函数创建了一个具体的对象之后,在这个具体的对象中就会有一个属性指向原型。这就是原型的概念
原型有一些常见的检测方式:
1.(Person.prototype.isPrototypeOf(p1)) 检测p1的构造器是否指向Person对象
2.(p1.hasOwnProperty("name"))检测name属性是否是p1内存中的,当然了,任何属性都可以检查 
在原型中有一个delete语句,这个语句可以删除我们赋予对象的自己属性,(注:只能是我们自己手动添加的属性,而不是原型中的)
原型重写
使用原型,如果我们的对象中存在大量的属性或者方法的时候,用上面的方法,就会显得代码臃肿,所有可以用json的方法来写原型
例子如下:
function Eat() {};
Eat.prototype = {
"name" : "小涛",
"color" : "pink",
"say" : function() {
alert("我叫"+this.name+",花色是"+this.color)
}
}
var c1 = new Eat();
c1.say();
var c2= new Eat();
c2.name = "小康";
c2.color = "purple";
c2.say();
原型终极解决方法:
function La(name,age,sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
La.prototype = {
"constructor" : La,
"say" : function() {
alert("我叫"+this.name+",年龄"+this.age+",我不是"+this.sex)
}
}
var a1 = new La("小涛","18","男")
a1.say()
定义
使用这种方法,使属性和方法分离,属性在构造函数中定义,方法在原型中定义,这样的话,可以解决大量属性时的代码臃肿,也可以解决产生闭包的情况,这种定义 javascript 对象的方式,就是我们最终的定义 javascript 对象的方案,是基于组合的方式定义,将属性的定义放在构造函数中,将方法的定义放在原型中。


0 0
原创粉丝点击