>  기사  >  웹 프론트엔드  >  JavaScript_javascript 기술의 유형 및 객체에 대한 간략한 분석

JavaScript_javascript 기술의 유형 및 객체에 대한 간략한 분석

WBOY
WBOY원래의
2016-05-16 17:11:49896검색

JavaScript是基于对象的,任何元素都可以看成对象。然而,类型和对象是不同的。本文中,我们除了讨论类型和对象的一些特点之外,更重要的是研究如何写出好的并且利于重用的类型。毕竟,JavaScript这种流行的脚本语言如果能够进行良好的封装,并形成一个庞大的类型库,对于重用是非常有意义的。

网上对于prototype的文章很多,一直没明白核心的思想。最后写了很多例子代码后才明白:prototype只能用在类型上。

以下是一些关于类型和对象的例子,大家看完例子后可能更容易理解类型和对象之间的联系:

 
例子代码
说明
1
Object.prototype.Property = 1;
Object.prototype.Method = function ()
{
    alert(1);
}
 
var obj = new Object();
alert(obj.Property);
obj.Method();
可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。

JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
2
var obj = new Object();
obj.prototype.Property = 1; //Error
//Error
obj.prototype.Method = function()
{
    alert(1);
}
在实例上不能使用prototype,否则发生编译错误
3
Object.Property = 1;
Object.Method = function()
{
    alert(1);
}
 
alert(Object.Property);
Object.Method();
可以为类型定义“静态”的属性和方法,直接在类型上调用即可
4
Object.Property = 1;
Object.Method = function()
{
    alert(1);
}
var obj = new Object();
alert(obj.Property); //Error
obj.Method(); //Error
实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。
5
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
var obj = new Aclass();
alert(obj.Property);
obj.Method();
这个例子演示了通常的在JavaScript中定义一个类型的方法
6
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
Aclass.prototype.Property2 = 2;
Aclass.prototype.Method2 = function
{
    alert(2);
}
var obj = new Aclass();
alert(obj.Property2);
obj.Method2();
可以在外部使用prototype为自定义的类型添加属性和方法。
7
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
Aclass.prototype.Property = 2;
Aclass.prototype.Method = function
{
    alert(2);
}
var obj = new Aclass();
alert(obj.Property);
obj.Method();
在外部不能通过prototype改变自定义类型的属性或方法。
该例子可以看到:调用的属性和方法仍是最初定义的结果。
8
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
var obj = new Aclass();
obj.Property = 2;
obj.Method = function()
{
    alert(2);
}
alert(obj.Property);
obj.Method();
可以在对象上改变属性。(这个是肯定的)
也可以在对象上改变方法。(和普遍的面向对象的概念不同)
9
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
var obj = new Aclass();
obj.Property2 = 2;
obj.Method2 = function()
{
    alert(2);
}
alert(obj.Property2);
obj.Method2();
可以在对象上增加属性或方法
10
function AClass()
{
       this.Property = 1;
       this.Method = function()
       {
              alert(1);
       }
}
 
function AClass2()
{
       this.Property2 = 2;
       this.Method2 = function()
       {
              alert(2);
       }
}
AClass2.prototype = new AClass();
 
var obj = new AClass2();
alert(obj.Property);
obj.Method();
alert(obj.Property2);
obj.Method2();
이 예는 한 유형이 다른 유형에서 상속되는 방식을 보여줍니다.
11
함수 AClass()
{
this.Property = 1;
this.Method = function()
{
경고(1);
}
}
함수 AClass2()
{
this.Property2 = 2;
this.Method2 = function()
{
경고(2);
}
}
AClass2.prototype = 새로운 AClass();
AClass2.prototype.Property = 3;
AClass2.prototype.Method = function()
{
경고(4);
}
var obj = new AClass2();
경고(obj.Property);
obj.Method();
이 예에서는 하위 클래스가 상위 클래스의 속성이나 메서드를 재정의하는 방법을 보여줍니다.
위 예에서 유형을 통한 재사용의 중요한 측면은 다음과 같습니다.
·예 1: JavaScript에서 동작 추가를 허용하는 유형
·예 2: 프로토타입 사용 제한
·예시 3: 유형의 정적 멤버를 정의하는 방법
·예시 7: 유형의 멤버 재정의에 대한 프로토타입 제한
·예시 10: 한 유형을 상속하도록 하는 방법 다른 A 유형에서
·예 11: 하위 클래스에서 상위 클래스의 멤버를 재정의하는 방법

JavaScript에서 구현할 수 있는 객체 지향 기능은 다음과 같습니다.
·퍼블릭 필드
·퍼블릭 메소드
·프라이빗 필드
·프라이빗 메소드(프라이빗 필드)
·메서드 오버로드
·생성자
·이벤트
·싱글 상속
·하위 클래스는 상위 클래스의 속성 또는 메서드를 재정의(재정의)
·정적 속성 또는 메서드(정적 멤버)
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.