/*
*对象方法
*类方法
* 原型方法
*/
function People(name) {
this.name = name;
this.say = function () { //对象方法
alert("my name is "+this.name);
}
} People.run = function () { //类方法(静态方法,只能由类名调用)
alert("i can run");
} People.prototype.sayChinese = function () {//原型方法
alert("我的名字是:"+this.name);
} var p1 = new People("menglinghua");
p1.say();
People.run();
p1.sayChinese(); p1.prototype //无法获取????????
p1.run(); //无法调用???
p1.sayChinese(); //可以调用 People.say();//无法调用????????
People.sayChinese();//无法调用???????? People.prototype.say();//无法调用????????
People.prototype.run();//无法调用???????? /*
*eg1
*/
function baseClass()
{
this.showMessage = function () {
alert("baseClass::showMessage()");
}
} function extendClass()
{ } extendClass.prototype = new baseClass();
var extendClassObj = new extendClass();
extendClassObj.showMessage(); //输出"baseClass::showMessage()" /*
*eg2 两个类含有同名方法
*/
function baseClass() {
this.showMessage = function () {
alert("baseClass::showMessage( )");
}
} function extendClass() {
this.showMessage = function () {
alert("extendClass::showMessage( )");
}
} extendClass.prototype = new baseClass();
var extendClassObj = new extendClass();
extendClassObj.showMessage(); //输出"extendClass::showMessage( )" /*
*eg3 让extendClass的实例调用baseClass的同名方法
*/
function baseClass() {
this.showMessage = function () {
alert("baseClass::showMessage( )");
}
} function extendClass() {
this.showMessage = function () {
alert("extendClass::showMessage( )");
}
} extendClass.prototype = new baseClass();
var extendClassObj = new extendClass();
var baseClassObj = new baseClass();
baseClassObj.showMessage.call(extendClassObj);//让【extendClassObj】调用【baseClassObj】的【showMessage】方法
//输出:"baseClass::showMessage( )" /*
*eg4
*/
function baseClass()
{
this.showMessage = function () {
alert("baseClass::showMessage( )");
}
this.baseShowMessage = function () {
alert("baseClass::baseShowMessage");
}
}
baseClass.showMessage = function () {
alert("baseClass::showMessge static");
} function extendClass()
{
this.showMessage = function () {
alert("extendClass::showMessage( )");
}
} extendClass.prototype = new baseClass();
var extendClassObj = new extendClass(); extendClassObj.showMessage();//输出:extendClass::showMessage( )
extendClassObj.baseShowMessage();//输出:baseClass::baseShowMessage baseClass.showMessage.call(extendClassObj);//输出:baseClass::showMessge static var baseClassObj = new baseClass();
baseClassObj.showMessage.call(extendClassObj);//输出:baseClass::showMessage( )

http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html

JS中prototype属性-JS原型模式的更多相关文章

  1. js中Prototype属性解释及常用方法

    1.prototype的定义 javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 每一个构造函数都有一个属 ...

  2. JS中prototype,js原型扩展

    作者:轩脉刃(yjf512)出处:(http://www.cnblogs.com/yjf512/)版权声明:本文的版权归作者与博客园共有.欢迎转载阅读,转载时须注明本文的详细链接. 原文 http:/ ...

  3. JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性

    在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中引入 ...

  4. 简单理解js的prototype属性

    在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的pr ...

  5. js中prototype,__proto__,constructor之间的关系

    首先,我们需要了解三点: 1. 只要创建一个任意新函数,就会根据一个prototype属性,该属性指向函数的原型对象: 2. 每一个原型对象都会自动获得一个constructor属性,该属性只想pro ...

  6. 复习一下js的prototype 属性

    <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</t ...

  7. Javascript中prototype属性详解 (存)

    Javascript中prototype属性详解   在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...

  8. (转载)详解Javascript中prototype属性(推荐)

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...

  9. 【微信小程序】在js中导入第三方js或自己写的js,使用外部js中的function的两种方法 import和require的区别使用方法 【外加:使用第三方js导出的默认function的调用方法】

    如下 定义了一个外部js文件,其中有一个function import lunaCommon from '../lunaCommon.js'; var ctx = wx.getStorageSync( ...

随机推荐

  1. hadoop 2.6.0上安装sqoop-1.99.6-bin-hadoop200

    第一步:下载sqoop-1.99.6-bin-hadoop200.tar.gz  地址:http://www.eu.apache.org/dist/sqoop/1.99.6/ 第二步:将下载好的sqo ...

  2. 无法显示TabHost的setIndicator设置的图片的问题解决办法

    本想做一个 带有图片的 分页显示的demo 但是 自己的代码写的也木有问题 ,所以只有mainifest 有问题了 主要是用到了  Tabhost <TabHost xmlns:android= ...

  3. C# 几十万级数据导出Excel,及Excel各种操作

    先上导出代码 /// <summary> /// 导出速度最快 /// </summary> /// <param name="list">&l ...

  4. 抽空通过简书网学习了一下console,感觉高大上!

    抽空看了一下简书中关于console的文章,为了便于自己今后查看,自己写了一遍!原文地址:http://www.jianshu.com/p/f961e1a03a56 测试代码在最下面 1.consol ...

  5. arry()数组的理解及api的使用(二)

    注意:本文都来自于w3school中文网,如果需要完整版请去--http://www.w3school.com.cn/jsref/jsref_obj_array.asp 1.1 slice() 方法- ...

  6. OpenSuse13.2安装CUDA Toolkit 7.5

    此次安装过程有点曲折,不过最后还是能成功安装,由于没细细看官方的安装文档,导致花了很多时间安装,希望此文能让想装CUDA的同学少走点弯路 1.NVIDIA Driver是否要装 刚开始要装CUDA时, ...

  7. TypeError: not enough arguments for format string

    到一个问题,表示100% 的时候,出现这个问题. 因为python语法会认为是你需要转移符,这个时候你可以选择100%% 来表示

  8. Vim 默认开启行号、语法显示等设置

      在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc. 在启动vim时,当前 ...

  9. linux环境c++开发:ubuntu12.04使用llvm3.4.2

    什么是 clang/llvm/libc++[1] clang 是最近几年(在大财主苹果的支持下)发展得非常好的 C 家族语言 (包括C/C++/Obj-C/Obj-C++) 编译器前端,所谓前端,就是 ...

  10. Search in Rotated Sorted Array (I, II) 解答

    Question Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 ...