标签:
由于 js 是解释执行的语言, 那么再代码中出现函数与对象如果重复执行, 会创建多个副本
// 1
function Student() {
var o = {};
o.name = ...
return o;
}
// 2
function Student () {
name: ....
age: ....
...
}
function fuc() {
this.sayHi = function () {
}
}
new fuc()
所创建出来的. 因此每一个对象在创建的时候, 函数 sayHi 都会被创建一次{} == {}
function sayHi () {}
function fuc () {
this.say = sayHi;
}
var f1 = new fuc();
var f2 = new fuc();
f1.sayHi(); // 如果 f1 没有 sayHi, 那么就会在 fuc.prototype 中去找
f2.sayGoodBye(); // 如果 f2 没有改方法, 那么就会在 fuc.prototype 中去找
只需要将共享的东西, 重复会多占用内存的东西放到 构造函数.prototype 中, 那么所有的对象就可以共享了.
function fuc() {}
fuc.prototype.sayHi = function () {
console.log( ... );
};
var f1 = new fuc();
f1.sayHi();
var f2 = new fuc();
f2.sayHi();
f1.sayHi === f2.sayHi
常见错误
function Student() {}
Student.prototype.name = ‘胡歌‘;
var p = new Student();
赋值的错误
function Student() {}
Student.prototype.name = ‘胡歌‘;
var p1 = new Student();
var p2 = new Student();
p1.name = ‘霍建华‘;
console.log( p1.name );
console.log( p2.name );
// 如果是访问数据, 当前对象中如果没有该数据就到构造函数的原型属性中去找
// 如果是写数据, 当对象中有该数据的时候, 就是修改值; 如果对象没有该数据, 那么就添加值
// 在 java 中, 最小的代码单位是 类
class Program {
// 成员
}
为什么使用原型?
Student.prototype = {
sayHello: function () {},
study: function () {}
};
标签:
原文地址:http://www.cnblogs.com/brightking/p/5724792.html