请看源码: 代码如下:function clone(o) { var F = function(){}; F.prototype = o; return new F(); } 首先看ext(4.1的1896行开始)的原型式继承。 代码如下:var TemplateClass = function(){}; var ExtObject = Ext.Object = { chain: function (object) { TemplateClass.prototype = object; var result = new TemplateClass(); TemplateClass.prototype = null; return result; } } 这里清除了object的prototype。 再看一...
我们先看一段传统的继承代码: 代码如下://定义超类 function Father(){ this.name = "父亲"; } Father.prototype.theSuperValue = ["NO1","NO2"]; //定义子类 function Child(){ } //实现继承 Child.prototype = new Father(); //修改共享数组 Child.prototype.theSuperValue.push("修改"); //创建子类实例 var theChild = new Child(); console.log(theChild.theSuperValue); //["NO1","NO2","修改"] //创建父类实例 var theFat...
一、前言 本文翻译自微软的牛人Scott Allen Prototypes and Inheritance in JavaScript ,本文对到底什么是Prototype和为什么通过Prototype能实现继承做了详细的分析和阐述,是理解JS OO 的佳作之一。翻译不好的地方望大家修改补充。 二、正文 JavaScript中的面向对象不同于其他语言,在学习前最好忘掉你所熟知的面向对象的概念。JS中的OO更强大、更值得讨论(arguably)、更灵活。 1.类和对象 JS从传统观点来说是面向对象的语言。属性...
1.原型链 //很少单独使用 代码如下:View Code //定义 SuperClass类,有一个属性property和一个方法getSuperValue function SuperClass() { this.property = true; } SuperClass.prototype.getSuperValue = function() { return this.property; } //定义SubClass类,有一个属性subproperty和后来添加的一个方法getSubValue function SubClass() { this.subproperty = false; } //SubClass类继承SuperClass类 SubClass.prototype = ...
一、javascript中的闭包 1、我们一起先来理解什么是函数的作用域。 2、调用的对象结合例子: 代码如下:function display(something) { function executeDisplay1() { document.write("我在帮老板打印:"+something+"<br />");//引用外部函数的something参数 } executeDisplay1();//函数display引用了内部函数 } display("sorry");//执行完毕后被垃圾收集器回收 3、闭包的形成例一、 代码如下:var obj = {};//全局的对象 function b...
第一个阶段: 代码如下:function A(){ this.funB = function(){ alert(A:funB); }; } A.prototype = { funA:function(){ alert(A:funA); } }; function B(){ } function extend(sub,parent){ sub.prototype = new parent(); sub.prototype.constructor = sub; } extend(B,A); var b = new B(); b.funA(); // out A:funA b.funB(); // out A:funB alert(b instanceof A); // out "true" 想必大家一眼就看出什么意思了,先是定义了A...
我今天做的尝试是,如何更它更像其他的语言一样的使用继承机制,多层继承和更方面的调用父类的构造。 我希望达到的效果: 代码如下:function A(){ alert(a); } function B(){ this.$supClass(); alert(b); } extend(B,A); function C(){ this.$supClass(); alert(c); } extend(C,B); var c = new C(); alert( c instanceof A ); //true alert( c instanceof B ); //true alert( c instanceof C ); //true 实例: js继承 functi...
如 new Object()、new Date()等等!(object有{},数组有[]这样的快捷方式 ,我们主要探讨new这种方式。) 我们在使用jQuery时从来没有使用过new,他是不是用其他方法来生成实例呢?是不是没有使用prototype属性呢?事实上他都有使用,只是内部处理的非常巧妙,提高了使用的爽快度。我们来看看他的源码。 代码如下:funtion jQuery( selector, context){ return new jQuery.fn.init( selector, context ); } 这里可以看出jQue...
Object.prototype JavaScript是基于原型继承的,任何对象都有一个prototype属性。Object.prototype是所有对象的根,并且不可改变。 代码如下:Object.prototype=null; alert(Object.prototype);//[object Object] Object与Object.prototype Object继承于Object.prototype,增加一个属性给Object.prototype上,同时也会反应到Object上。如: 代码如下:Object.prototype.nameStr="Object Prototype"; Object.prototype.getName=func...
【废话】 面试时被经理问到其中一个问题让我印象很深刻,因为我想了很久没能答上来。题目是 JavaScript是怎样实现继承的? 面向对象是在开发过程中一直使用的,因此,继承也是最基础的一部分,自己开始接触JS到现在差不多两年多了,这个基础我竟然都没过关,看来我的理论功还要加大力度提升啊!!!我重新查了资料,终于深刻理解下来了。废话就这么多了,Coding Action... 【正文】 大家都知道,C#中使用的是传统的类继承是...
这一语言功能的本质依赖于 JavaScript 特有的原型链(prototype chain)模式。 所以严格意义上说,JavaScript 是基于原型的面向对象语言。也就是说,每个实例对象都具有一个原型。对象从该原型中继承属性和方法。 1、构造函数 利用构造函数,可以简单地创建对象。构造函数内的 this 关键字指向实例对象本身: 代码如下:function People(name){ this.name = name; } 使用 new 运算符和构造函数创建实例对象: 代码如下:var people ...
上回说到《JavaScript 原型继承之基础机制》,这一篇将具体说说构造函数的继承。 从一个简单的示例开始,创建描述人类的 People 构造函数: 代码如下:function People(){ this.race = 愚蠢的人类; } 然后,创建描述黄种人的 Yellow 构造函数: 代码如下:function Yellow(name, skin){ this.name = name; this.skin = skin; } 要使得黄种人 Yellow 能继承人类 People 对象,在 JavaScript 中可以通过多种方式模拟实现。 1、对象...
起因: 今天在阅读snandy大神的读jQuery之五(取DOM元素)时,看到有讲到toArray()方法,具体jQuery代码如下: 代码如下:toArray: function() { return slice.call( this, 0 ); }, get: function( num ) { return num == null ? // Return a clean array this.toArray() : // Return just the object ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, 看到这里的call()方法,以前也看过手册,说是对象冒充的,用于...
今天要介绍的是,如何生成一个"继承"多个对象的实例。 比如,现在有一个"动物"对象的构造函数, 代码如下: function Animal(){ this.species = "动物"; } 还有一个"猫"对象的构造函数, 代码如下: function Cat(name,color){ this.name = name; this.color = color; } 怎样才能使"猫"继承"动物"呢? 1. 构造函数绑定 最简单的方法,大概就是使用call或apply方法,将父对象的构造函数绑定...
我一直很难理解Javascript语言的继承机制。 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承。我花了很多时间,学习这个部分,还做了很多笔记。但是都属于强行记忆,无法从根本上理解。直到昨天,我读到法国程序员Vjeux的解释,才恍然大悟,完全明白了Javascript为什么这样设计。下面,我尝试用自己的语言,来解释它的设计思想。彻底说...