javascript - 什么时候使用 "prototype"这个词来为 javascript 中的对象添加新属性?

标签 javascript object prototype

我不明白在 JavaScript 中什么时候使用“原型(prototype)”这个词,什么时候使用简单的“点”符号而不使用“原型(prototype)”这个词。有人可以查看这些代码块并帮助我了解您何时想要使用一个代码块吗?

“原型(prototype)”:

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);

没有“原型(prototype)”:

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 对象有一个属性,它是指向另一个对象的指针。这个指针是对象的原型(prototype)。默认情况下,对象实例共享相同的原型(prototype):

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

关于javascript - 什么时候使用 "prototype"这个词来为 javascript 中的对象添加新属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10430794/

相关文章:

C编程练习: Function Prototype

oop - 是否可以在 Scala 中进行基于原型(prototype)的编程?

javascript - 如何将变量传递给事件中的构造函数方法?

javascript - 使用 SJCL 获取 sha256 哈希的十六进制表示

javascript - 在 Material-UI TableCell 中格式化日期字符串

object - java中RSA加密的替代方案

php - 使用 PHP 解析 Json 响应,数组键中有空格

node.js - 将 javascript 对象分配给新对象作为副本

javascript - 单击按钮时如何创建元素的副本

javascript - Chrome 中的 HTML5 视频边框半径不起作用