学习记录2

Posted linquesblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习记录2相关的知识,希望对你有一定的参考价值。

(1)原型/原型对象

创建构造函数

function HI(name)

this.name=name;

this.sayHi=function()

console.log(this.name)

缺点:每创造一个对象都会新辟一个内存位置来存放功能函数,多个执行会减低性能

改进1

function HI(name)

this.name=name;

this.sayHi=sayHi;

function sayHi()

console.log(this.name);

缺点:多个执行容易出现重名情况同时也不好查找

最终改进

采用原型

例0

Hi.prototype.sayHi=function()

console.log(this.name);

同时对象可以访问到原型的成员

在调用对象的属性和方法的时候,会先去找对象本身的属性和方法,没有才去找原型里的对象和方法,如果查找的东西在二者都没有时会报错

对象的__proto__(为非标准属性)等于构造函数中的.prototype

在原型对象中有一个constructor属性

该属性作用是记录了创建该对象的构造函数

只要是对象就会有__proto__属性,原型也拥有这个属性

而原型的__proto__指向object对象(object原型对象),object对象的prototype指向Object构造函数

再次指向object原型对象的__proto__属性,则指向null

从而形成一条原型链:在调用对象的属性和方法时,本身查找不到会按这条原型链查找下去,直到没有返回报错信息

例本身有一个Student构造函数

有一个调用该函数的s1对象

s1对象通过s1.__proto__指向Student构造函数的原型,Student构造函数的原型通过Student原型对象的__proto__指向Object原型对象,Object原型对象通过Object原型对象的__proto__指向null

在设置属性值时不会搜索原型链,所以一个对象的prototype值修改时不会使另一个对象受影响,因为不搜索原型链而采用新增属性值来完成

一般情况下,对象的属性值在构造函数中设置,对象的方法在构造函数中的原型设置,重新改变原型中的prototype属性,将原型设置为一个对象

例1

Student.prototype=

sayHi:function()

console.log(‘hi‘);,(用逗号分隔开)

ok:function()

console.log(‘ok‘);

上面比较便捷,但是会导致s1.constructor属性不能正确显示出构造函数,因为会将prototype属性重新覆盖,显示的值为原型链下一个constructor的值

改进

Student.prototype=

constructor:Student,

sayHi:function()

console.log(‘hi‘);,(用逗号分隔开)

ok:function()

console.log(‘ok‘);

另一个注意点,想使用原型对象,要先设置原型对象,否则无法访问原型

(2)

var arr=[4,5,6,8];

Array.prototype.getSum=function()

//获取数组中的值采用this

for(i=0;i<this.length;i++)//

注意数组或者String不能修改prototype的值,所以不能采用例1的写法,要用例0的写法

(3)防止他人不按规则调用函数

function Ok(option)

option=option||;

this.name=option.name||‘xiaoming‘;

(4)对象拷贝

function extend(parents,child)

for(var key in parents)

if(child[key])

continue;

child[key]=parents[key];

则子只需写不需要继承的数值。

(5)继承

指类型与类型之间的关系

目的是把子类型共同部分提升到父类型

1原型继承

child.prototype=new Parent();

child.prototype.constuctor=child;

缺点:无法设置构造函数的参数,不实用

 

以上是关于学习记录2的主要内容,如果未能解决你的问题,请参考以下文章

2016-2-24日学习记录

Python学习记录day6

python学习记录三

caffe学习记录2——blobs

20220714 第二组 刘世琦 学习记录

python学习记录2