js prototype 属性,js prototype 是什么?

prototype 属性使您有能力向对象添加属性和方法。

语法:object.prototype.name=value

实例

在本例中,我们将展示如何使用 prototype 属性来向对象添加属性:

function employee(name,job,born)
{
this.name=name;
this.job=job;
this.born=born;
}

var bill=new employee("Bill Gates","Engineer",1985);

employee.prototype.salary=null;
bill.salary=20000;

document.write(bill.salary);

输出:20000

简单理解:prototype对象是实现面向对象的一个重要机制。每个函数也是一个对象,它们对应的类就是function,每个函数对象都具有一个子对象prototype。Prototype 表示了该函数的原型,

prototype表示了一个类的属性的集合。当通过new来生成一个类的对象时,prototype对象的属性就会成为实例化对象的属性。
在J 里面全都是对象, 类Function是function的顶级超类,function实例化了叫对象,在function未实例定义的时候,其实这个定义也是属于Function。

再举一个例子来说明prototype:

/*
* 关于prototype,理解这个很有必要
* 可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。
* JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
* 以后这样分,没有实例化的类称为类型,实例化的类称为对象实例简称实例
*/
Object.prototype.name = "jshaman.com";
Object.prototype.nihao = function(){
alert("i can method name is "+this.name);
}
var obj = new Object();
obj.nihao();
alert(obj.name);
//在实例上不能使用prototype,否则会发生编译错误
obj.prototype.sex = "男";//error,无法给一个实例prototype
var o = {
name:"zhangsan"
}
o.prototype.age = 30;//error,无法给一个实例prototype
//可以为类型定义“静态”的属性和方法,直接在类型上调用即可
alert(Object.name);
Object.nihao();
//实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。
Object.class = "三年二班";//类静态属性
var ob = new Object();
alert(ob.class); //error 实例不能调用类型的静态属性和方法
//可以在外部使用prototype为自定义的类型添加属性和方法。
function Mytest(){
this.name = "ty2y.com";
this.age = 20;
}
Mytest.prototype.hello = function(){
alert(this.name);
}
var m = new Mytest();
m.hello();
//在外部不能通过prototype改变自定义类型的属性或方法。
//该例子可以看到:调用的属性和方法仍是最初定义的结果。
Mytest.prototype.name = "lisi";
var mm = new Mytest();
alert(mm.name);
//可以在对象实例上改变或增加属性。(这个是肯定的)
//也可以在对象上改变或增加方法。(和普遍的面向对象的概念不同)
mm.name2 = "lisi";
mm.hello = function(){
alert(this.name2);
}
//mm.hello();
//继承,这个例子说明了一个类型如何从另一个类型继承。
function Mytest2(){}
Mytest2.prototype = new Mytest;
var m2 = new Mytest2();
alert(m2.name);
//这个例子说明了子类如何重写父类的属性或方法。
Mytest2.prototype.name = "fairysoftware.com";
Mytest2.prototype.hello = function(){
alert('i can mytest2 extend Mytest save method hello');
}
var m3 = new Mytest2();
m3.hello();
//子类中的name属性值不会被父类覆盖
function Mytest3(){
this.name = "子类中的name属性值不会被父类覆盖";
this.age = 20;
}
Mytest3.prototype = new Mytest();
var m4 = new Mytest3();
alert(m4.name);

好了,关于js prototype 属性,js prototype 是什么?大家应该理解了吧。


js prototype 属性是什么?


最后,JS代码由于是解释性语言,它的代码是透明的。因此,在现实环境中,如果产品或项目的代码有安全需求,需要防止分析、破解、盗用,则应该对JS代码加密。这里推荐使用JShaman,国内最专业的JS加密平台。