tim*_*son 11 javascript prototype object
我不明白在JavaScript中何时使用"原型"一词与使用简单的"点"符号而不使用"原型"一词.有人可以查看这些代码块并帮助我了解您何时想要使用其中一个代码块?
与 "原型":
function employee(name,jobtitle)
{
  this.name=name;
  this.jobtitle=jobtitle;
}
var fred=new employee("Fred Flintstone","Caveman");
employee.prototype.salary=null;
fred.salary=20000;
console.log(fred.salary);
没有 "原型":
function employee(name,jobtitle,salary)
{
  this.name=name;
  this.jobtitle=jobtitle;
  this.salary=salary;
}
var fred=new employee("Fred Flintstone","Caveman", 20000);
console.log(fred.salary);
JavaScript对象具有一个属性,该属性是指向另一个对象的指针.该指针是对象的原型.默认情况下,对象实例共享相同的原型:
function Employee(name){
  this.name = name;
}
Employee.prototype.company = "IBM";
Employee.prototype.who = function(){
  console.log("My name is", this.name, "I work for", this.company);
}
var bob = new Employee('Bob');
var jim = new Employee('Jim');
// bob and jim are seperate objects, but each is linked to the same 'prototype' object.
jim.who(); // jim doesn't have a property called 'who', so it falls back to it's 'prototype', where who exists
// My name is Jim I work for IBM
bob.who();
// My name is Bob I work for IBM
// Bob leaves IBM for Microsoft
bob.company = "Microsoft"; // bob now has a property called 'company'. The value of which is 'Microsoft', which overrides bob's prototype property of the same name.
bob.who();
// My name is Bob I work for Microsoft
Employee.prototype.company = 'Facebook';
jim.who(); 
// My name is Jim I work for Facebook
bob.who(); // Bob is not affected by the change.
// My name is Bob I work for Microsoft
delete bob.company;
bob.who(); // bob no longer has it's own property 'company', so like jim, it drops down to the prototype object.
// My name is Bob I work for Facebook
围绕JS和继承的问题可能很复杂,但问题的答案相对简单.考虑以下代码:
 function Klass() { }
 var obj1 = new Klass();
 var obj2 = new Klass();
现在,如果向obj1添加属性,则该属性仅存在于obj1上.同样obj2.
如果向Klass添加属性,则该属性同样仅存在于Klass(函数对象)上.它根本不影响obj1和obj2.
但是如果你向Klass.prototype添加一个属性,那么该属性将出现在obj1和obj2上,以及通过'new Klass'创建的任何未来对象.如果然后更改原型上属性的值,则更改的值将是您在所有这些对象上看到的值.
您可以在Klass函数的主体内添加代码以添加属性this; 这将导致任何未来的Klass对象获得这些属性.但是每个对象都有自己的副本 - 这可以在内存方面加起来,特别是当属性是方法时 - 这些副本不会受到未来对Klass主体的更改的影响.
| 归档时间: | 
 | 
| 查看次数: | 1700 次 | 
| 最近记录: |