`

JS类中定义原型方法的两种实现的区别

    博客分类:
  • Ajax
阅读更多
我们知道,给JavaScript类添加原形(prototype)方法是很简单的。而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗?
JScript Class:
function JSClass()
{
}
Extends prototype method:
JSClass.prototype.MethodA = function()
{
};
Or
function = JSClass.prototype.MethodA()
{
};
其实这两个原形定义方式可以简化一下来讨论,先把它们看作是两个函数,如下:
Foo1();
function Foo1()
{
alert(’This is Foo1.’);
}
和 Foo2();
var Foo2 = function()
{
alert(’This is Foo2.’);
}
运行第一个显然是不会有任何错误的,可是运行第二个就有问题了,这时系统会说:Microsoft JScript runtime error: Object expected。这就是说函数定义(Foo1)在脚本解析器中有最高的初始化优先级,这个很好理解。如果不优先处理函数,那么对于函数中的函数调用就没有办法处理了,假使我们先定fn1()再定义fn2(),却从fn1中调fn2,那么就通不过解析了。为什么Foo2不能被初始化,Foo2的定义根本不是函数定义,它是一个标准的赋值语句,之所以能象标准函数一样的使用Foo2(Foo2()),完全是因为它指向的是一个函数对象的实例而已。
再来看原形方法导入里的两种方式,就很简单了。并且不同的执行优先循序,也决了它们在使用中的不同,看如下示例:
<script language="javascript">
function NormalClass()
{
this.m_Property1 = ’P1 in Normal Class.’;
this.m_Property2 = ’P2 in Normal Class.’;
this.toString = function()
{
return ’[class NormalClass]’;
}
return new InnerClass();
function InnerClass()
{
this.m_Property1 = ’P1 in Inner Class.’;
this.m_Property2 = ’P2 in Inner Class.’;
this.toString = function()
{
return ’[class InnerClass]’;
}
}
InnerClass.prototype.Method1 = function()
{
alert(this.m_Property1);
};
function InnerClass.prototype.Method2()
{
alert(this.m_Property2);
};
}
</script>
执行:
var nc = new NormalClass();
nc.Method1();
nc.Method2();
是什么效果?为什么?
本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/7951.htm
分享到:
评论

相关推荐

    JS类定义原型方法的两种实现的区别评论很多

    我们知道,给JavaScript类添加原形(prototype)方法是很简单的。而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗? JScript Class: 代码如下: function...# re: JS类定义原型方法的两种实现的区别 

    JavaScript中定义对象原型的两种使用方法

    无论使用哪种方式定义原型,它们都参与了JavaScript的原型链。当试图访问一个对象的属性时,JavaScript会首先查找该对象自身的属性,如果没有找到,就会向上查找其构造函数的`prototype`,如此递归,直到找到属性或...

    js原型继承的两种方法对比介绍.docx

    ### JS原型继承的两种方法对比介绍 #### 一、引言 在JavaScript中,对象间的继承机制主要依赖于原型链。原型链的概念使得JavaScript能够实现动态面向对象编程,并且提供了非常灵活的对象创建与继承的方式。在实际...

    requirejs实现的简单的类定义

    RequireJS是一个流行的AMD(Asynchronous Module Definition)规范的实现,它允许我们在浏览器环境中实现异步加载和组织JavaScript模块。本篇文章将深入探讨如何使用RequireJS实现简单的类定义。 首先,了解...

    Javascript中实现trim函数的两种方法.docx

    ### JavaScript中实现trim函数的两种方法 在日常的前端开发工作中,我们经常需要对字符串进行操作,其中一种常见的需求就是去除字符串两端的空白字符。尽管现代JavaScript已经内置了`trim()`方法来帮助开发者轻松...

    javascript 类方法定义还是有点区别

    在给定的标题和描述中,提到了两种定义函数的方法,它们在某些情况下可能会有不同的行为,特别是当涉及到浏览器兼容性问题时。 1. **函数声明(Function Declaration)** ``` function abc() {} ``` 这种方式是...

    JS定义静态类

    这段代码提供了一种实现限制文本框输入长度的方法,虽然它使用了函数而非ES6中更现代的类语法来定义静态方法和属性,但依然实现了基本的需求。对于希望了解如何在不使用ES6类的情况下模拟静态方法和属性的开发者而言...

    JavaScript定义类或函数的几种方式小结

    混合构造函数/原型模式结合了构造函数和原型两种方式的优点。通过构造函数定义对象的属性,通过原型定义对象的方法。这样,每个对象的属性仍然是唯一的,而方法则可以通过原型链被所有对象共享。混合模式的代码示例...

    浅析JavaScript实现基于原型对象的“继承”.pdf

    本文旨在对JavaScript实现基于原型对象的“继承”进行深入分析,并与基于类的继承进行比较。通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合模式”,使读者能够更好地理解和应用...

    js原型通用验证框架

    原型是JavaScript中的一大特色,通过原型链机制,一个对象可以继承另一个对象的属性和方法,实现类的继承。 框架中可能包含以下关键知识点: 1. **原型链**:JavaScript的对象可以通过原型链共享属性和方法,一个...

    JS的原型和原型链.pdf

    通过原型链的机制,JavaScript得以实现一种基于原型的继承方式,这种继承机制与传统的基于类的继承有所不同。在JavaScript中,函数可以看作是一类特殊的对象,它们不仅拥有函数的特性,还拥有创建原型链的能力。通过...

    js中使用使用原型(prototype)定义方法的好处详解

    通过将一个对象作为另一个对象的原型,可以继承其所有属性和方法,这是JavaScript中实现继承的一种常见方式。 ```javascript function SubConstractor() {} SubConstractor.prototype = new Constractor(); // 继承...

    Javascript中类式继承和原型式继承的实现方法和区别之处

    其它的面向对象程序设计语言都是通过关键字来解决继承的问题。但是javascript中并没有定义这种实现的机制。接下来通过本文给大家介绍Javascript中类式继承和原型式继承的实现方法和区别,需要的朋友可以参考下

    详解js中的原型,原型对象,原型链.docx

    通过以上讨论,我们可以看到JavaScript中的原型机制为实现面向对象编程提供了一种非常灵活的方法。了解原型、原型对象和原型链的工作原理对于编写高效、可维护的JavaScript代码至关重要。掌握这些概念可以帮助开发者...

    第15章 javascript面向对象与原型

    ECMAScript,也就是JavaScript的语言规范,支持两种开发模式:函数式(过程化)和面向对象(OOP)。面向对象编程语言的一个核心概念是类,通过类可以创建具有相同属性和方法的对象。然而,ECMAScript中并没有引入类...

    【JavaScript源代码】怎样用JavaScript实现原型模式.docx

    通过上述两种方法,我们可以灵活地在JavaScript中实现原型模式。此外,深入理解原型、原型链以及`prototype`、`__proto__`、`constructor`等属性对于掌握JavaScript的高级特性至关重要。这些知识不仅有助于更好地...

Global site tag (gtag.js) - Google Analytics