发表于: 2017-02-10 04:36:42

1 1302


今天完成的事情:

1.继续任务8的搜索功能。

2.原型和原型链相关的ppt制作以及分享。

遇到的问题:

搜索功能的代码,还存在问题。再检查一下。感觉应该写复杂了,先排查再简化吧。

收获:

关于原型和原型链:

1.背景介绍

JavaScript对象是一个属性的集合,另外有一个隐式的对象:原型对象。原型的值可以是一个对象或者null。一般的引擎实现中,JS对象会包含若干个隐藏属性,对象的原型由这些隐藏属性之一引用,我们在本文中讨论时,将假定这个属性的名称为"__proto__"(事实上,SpiderMonkey内部正是使用了这个名称,但是规范中并未做要求,因此这个名称依赖于实现)。 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个链就是原型链。

2.知识剖析

ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想就是利用原型让一个引用类型继承另一个引用类型的属性和方法。

JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined.原型链一般实现为一个链表,这样就可以按照一定的顺序来查找。

原型的动态性:对原型对象所做的实时修改都能从实例上立即反应出来。(注意区别添加修改和重写了原型对象)

原型对象包含指向构造函数的指针。a实例包含指向a原型对象内部的指针,使得我们可以访问原型对象的属性。如果让b原型对象等于a对象的实例那我们就可以访问a对象的原型对象及其属性和方法了。同理a的原型对象也可以是通过该种方法从c继承过来...

3.常见问题

原型链怎样实现继承

4.解决方案

原型对象包含指向构造函数的指针,这使得子类可以访问到构造函数中的属性。实例包含指向原型对象的内部的指针。


ex:
a实例包含指向a原型对象内部的指针,使得我们可以访问原型对象的属性。如果让b原型对象等于a对象的实例那我们就可以访问a对象的原型对象及其属性和方法了。同理a的原型对象也可以是通过该种方法从c继承过来...

5.编码实战

先给大家引入一个例子:组合使用构造函数模式和原型模式创建自定义类型

     function Person(name,age,job){

                         this.name = name;

                         this.age = age;

                         this.job = job;

                         this.friends = ["Lance","Alice"];

                    }

                    

                    Person.prototype = {

                          constructor : Person;

                          sayName : function() {

                               alert(this.name);

                    }

                    }

实现原型链的基本模式举例:

 function SuperType (){

                            this.property = true;

                        }

                        SuperType.prototype.getSuperValue = function(){

                            return this.property;

                        }

                        function SubType() {

                           this.subproperty = false ;

                        }

                        

                        SubType.prototype = new SuperType();

                        

                        

                        SubType.prototype.getSubValue = function(){

                             return this.subproperty;

                        };

                        var instance = new SubType();

                        alert(instance.getSuperValue());     //true

                    




返回列表 返回列表
评论

    分享到