js prototype 详解(学习) 简单

<html>
<head>
<title>JS学习</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
js prototype 详解
<script>
//例子一
/*Object.prototype.Peoperty = 1;
Object.prototype.Method = function()
{
alert("this method 1");
}
var obj = new Object();
alert(obj.Peoperty);
obj.Method();*/
//可以在类型上使用ptoptotype来为类型添加行为,这些行为只能在类型的实例上体现
//JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String


//例子二
/*var obj = new Object();
obj.prototype.Property = 1;
obj.prototype.Mothod = function()
{
alert("1");
}*/
//在实例上不能使用prototype,否则发生编译错误

//例子三
/*Object.Property = 1;
Object.Method = function()
{
alert("this method");
}
alert(Object.Property);
Object.Method();*/
//可以为类型定义"静态"的属性和方法,直接在类开

//例子四
/*//MyObject.Property = 1;
//只能使用Object关键字才行
Object.Property = 1;
Object.Method = function()
{
alert("this MyObject");
}
//var obj = new MyOjbect();
//alert(obj.Property);
//obj.Method();
Object.Method();*/
//Error 实例不能调用类型的静态属性或方法,否则发生对像未定义的错误


//实例五
/*function Aclass()
{
this.Property = 1;
this.Method = function()
{

alert("Aclass Method");
}
}
var obj = new Aclass();
alert(obj.Property);
obj.Method();*/
//这个例子演示了通常的在JavaScript中定义的一个类型的方法


//例子六
/*function Aclass()
{
this.Property = 1;
this.Method = function()
{
alert("Aclass Method");
}
}
Aclass.prototype.Property2 = 2;
Aclass.prototype.Method2 = function()
{
alert("Aclass Method2");
}
var obj = new Aclass();
alert(obj.Property2);
obj.Method2();*/
//可以在外部使用prototype为自定义的类型添加属性和方法


//例子七
/*function Aclass()
{
this.Peoperty = 11;
this.Method = function()
{
alert("this Method");
}
}
Aclass.prototype.Peoperty = 22;
Aclass.prototype.Method = function()
{
alert("Aclass Method2");
}
var obj = new Aclass();
alert(obj.Property); //我测试的结果为: 属性是可以在外部进行修改的
obj.Method(); //但方法在外部修改不起作用*/
//后面发现单词写错了
//在外部不能通过prototype改变自定义类型的属性和方法
//该例子可以看到,调用的属性和方法仍是最初定义的结果
//===================================================


//例子八
/*function Aclass()
{
this.Peoperty = 11;
this.Method = function()
{
alert("this Method");
}
}
var obj = new Aclass();
obj.Peoperty = 22;
obj.Method = function()
{
alert("this Method2");
}
alert(obj.Peoperty);
obj.Method();*/
//可以在对像上改变属性
//也可以在对像上改变方法(和普通的面向对像的不同)

//例子九
/*function Aclass()
{

this.Property = 1;
this.Method = function()
{
alert("this Method");
}
}
var obj = new Aclass();
obj.Property2 = 22;
obj.Method2 = function()
{
alert("this Method2");
}
alert(obj.Property2);
obj.Method2();*/
//可以在对像上增加属性或方法


//例子十
/*function Aclass()
{
this.Property = 1;
this.Method = function()
{
alert("this Method");
}
}

function Aclass2()
{
this.Property2= 22;
this.Method2 = function()
{
alert("this Method2");
}
}

Aclass2.prototype = new Aclass(); //Aclass2继承Aclass类型
var obj = new Aclass2();
alert(obj.Property);
obj.Method();
alert(obj.Property2);
obj.Method2();*/
//说明了一个类型如何从另一个类型继承


//例子十一
function Aclass()
{
this.Property = 1;
this.Method = function(){
alert("this Method");
}
}
function Aclass2()
{
this.Property2 = 22;
this.Method2 = function(){
alert("this Method2");
}
}
Aclass2.prototype = new Aclass();
Aclass2.prototype.Property = 33;
Aclass2.Property.Method = function()
{
alert("this Method");
}
alert(obj.Property);
obj.Method();
//这个例子说明了子类如何重写父类的属性或方法

//JavaScript能够实现的面向对像的特征有
//公有属性(public field)
//公有方法(public Method)
//私有属性(private field)
//私有方法(provate Method)
//方法重载(method overload)
//构造函数(constructor)
//事件(event)
//单一继承(single inherit)
//子类重写父类的属性或方法(override)
//静态属性或方法(static member)
</script>

</body>
</html>

原文地址:https://www.cnblogs.com/xiangxiaodong/p/2827159.html