原型(prototype)
来源:互联网 发布:2016淘宝盗图新规则 编辑:程序博客网 时间:2024/06/11 05:58
传统构造函数的问题
function Foo() { this.sHello = function (){ } }
- 由于对象是调用
new Foo()
所创建出来的,因此每一个对象在 创建的时候,函数sHello 都会被创建一次 - 那么每个对象都含有一个独立的,不同的,但是功能逻辑一样的函数, 比如:
{} == {}
- 在代码中方法就会消耗性能,最典型的资源就是内存.
- 这里最好的办法就是将函数体放在构造函数之外,那么在构造函数中 只需要引用该函数即可
function sHello (){} function Foo(){ this.s = sHello; }
会在发开中变得困难:引入框架危险,代码繁冗不好维护,解决办法 就是外面的函数如果不占用名字,而且在函数旗下就好了。
每一个函数在定义的时候,有一个神秘对象创建出来,
- 每一个由构造函数创建的对象都会默认的链接到该神秘对象上。
var f1 = new Foo(); var f2 = new Foo(); f1.sHello();//如果f1没有sHello,那么就会在Foo。prototype中去找 f2.sHello();//如果f2没有sHello,那么就会在Foo。prototype中去找
- 由构造函数创建出来的众多对象共享一个对象,就是构造函数 .prototype
- 只需要将共享的东西,重复会多占用内存的东西放到构造函数 .prototype 中,
那么所有的对象
function Foo() {} Foo.prototype.sHello = function (){ console.log('...'); }; var f1 = new Foo(); f1.sHello(); var f2 = new Foo(); f2.sHello(); console.log( f1.sHello === f2.sHello ); //true
练习:
function Student (name, age, gender){ this.name = name; this.age = age; this.gender = gender;}Student.prototype.sHello = function(){ console.log('你好'); };Student.prototype.study = function(){ console.log('学习');}
常见错误
- 写构造函数.prototupe 的时候,将属性也加到里面。
function Person() {} Person.prototupe.name = '张三'; var p = new Person(); //name是死的无法改变的。 //有一个函数创建出来的对象都需要初始化这个属性时,时对的。 //数组初始化的时候都是空数组;
- 赋值的错误
function Person() {} Person.prototupe.name = '张三'; var p1 = new Person(); var p2 = new Person(); p1.name = '李四'; console.log(p1.name); console.log(p2.name); //如果是访问数据,当前对象中如果没有该数据就到构造函数的原型属性中去找 //如果是写数据,当对象中有该数据的时候,就是修改值; 如果对象没有该数据,那么就添加值。
阅读全文
0 0
- 原型模式(Prototype)
- 原型模式(prototype)
- 原型(Prototype)模式
- 原型(ProtoType)模式
- 原型模式(Prototype)
- prototype(原型)
- 原型模式(Prototype)
- Prototype(原型模式)
- 原型(Prototype)模式
- Prototype(原型模式)
- PROTOTYPE(原型)模式
- 原型模式(ProtoType)
- 原型(prototype)模式
- 原型模式(Prototype)
- 原型模式(Prototype)
- 原型模式(Prototype)
- 原型模式(prototype)
- 原型模式(prototype)
- Ubuntu amd64系统下运行程序出现“No such file or directory”
- 算法之红黑树
- Exception
- SEO 优化
- eclipse编辑器中,如何配置编译命令-lm,使math.h 和pow(a,b)函数生效——C语言学习笔记4
- 原型(prototype)
- HDU_P1421搬寝室
- AsyncQueryHandler的使用
- iOS中 Framework静态库的创建和使用遇到的那些坑 韩俊强的博客
- 大数据浪潮下_前端工程师眼中的完整数据链图
- Emgucv3.0的安装与配置
- mysql的各种存储引擎使用及介绍
- 性能测试名词.解释
- ubuntu 16.04 x64 root密码更改与ssh服务开启指引