JS中prototype属性-JS原型模式
/*
*对象方法
*类方法
* 原型方法
*/
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原型模式的更多相关文章
- js中Prototype属性解释及常用方法
1.prototype的定义 javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 每一个构造函数都有一个属 ...
- JS中prototype,js原型扩展
作者:轩脉刃(yjf512)出处:(http://www.cnblogs.com/yjf512/)版权声明:本文的版权归作者与博客园共有.欢迎转载阅读,转载时须注明本文的详细链接. 原文 http:/ ...
- JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性
在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中引入 ...
- 简单理解js的prototype属性
在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的pr ...
- js中prototype,__proto__,constructor之间的关系
首先,我们需要了解三点: 1. 只要创建一个任意新函数,就会根据一个prototype属性,该属性指向函数的原型对象: 2. 每一个原型对象都会自动获得一个constructor属性,该属性只想pro ...
- 复习一下js的prototype 属性
<html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</t ...
- Javascript中prototype属性详解 (存)
Javascript中prototype属性详解 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- 【微信小程序】在js中导入第三方js或自己写的js,使用外部js中的function的两种方法 import和require的区别使用方法 【外加:使用第三方js导出的默认function的调用方法】
如下 定义了一个外部js文件,其中有一个function import lunaCommon from '../lunaCommon.js'; var ctx = wx.getStorageSync( ...
随机推荐
- visifire 图表双坐标轴 silverlight
public void CreateChart(Grid oGrid, ObservableCollection<ListItem> lBaseOilBar) { ...
- js处理数学经典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Linux中的常见配置文件
网络服务端口 /etc/services
- C#拖动自己的定义标题栏(panel)以及实现窗体拖动关闭和最小化
//没有标题 this.FormBorderStyle = FormBorderStyle.None; //任务栏不显示 this.ShowInTaskbar = false; //实现拖动 1.在窗 ...
- (转) Python in NetBeans IDE 8.0
原地址: https://blogs.oracle.com/geertjan/entry/python_in_netbeans_ide_8 Copy this to the clipboard: ht ...
- android布局常用属性记录
android布局常用属性记录 http://blog.csdn.net/xn4545945/article/details/7717086这里有一部分别人总结的其余的: align:对齐 par ...
- PHP第三节笔记
●为什么要安装web服务器,和怎么样去了解发送和接受到什么? 1.因为我们的浏览器要取数据,数据是从服务器取出来的. 2.我们可以通过httpwatch工具来获取发送和接收的数据,有利于我们了解的更加 ...
- Funny String
def main(): t = int(raw_input()) for _ in xrange(t): s = raw_input().strip() s_len = len(s) is_funny ...
- CoreData (三)备
NSFetchedResultsController 什么是NSFetchedResultsController NSFetchedResultsController是一个让人爱恨交加的一个类.如果使 ...
- #Java编程题-百钱百鸡
问题: 百钱百鸡问题.用100钱买100只鸡,公鸡一只五钱,母鸡一只三钱,雏鸡三只一钱,编程计算共有几种买法(要求每种鸡至少要买1只). 自己的实现,没有什么数据结构,算法,求大神指点!! packa ...