在javascript中使用原型

Tri*_*der 1 javascript prototype

我正在学习JavaScript的原型,这是我正在尝试的代码 -

<script>
function employee(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
}

var trialcoder = new employee('trialcoder', 26, 'M');
//employee.prototype.salary = null;
trialcoder.salary = 19000;

document.write("salary is "+ trialcoder.salary);
</script>
Run Code Online (Sandbox Code Playgroud)

我的想法 - 要添加另一个属性,我们需要使用prototype- employee.prototype.salary = null;所以在不评论这一行,我期待一个错误,但它不是..我知道我在错误的prototype概念.

代码来源 - http://www.w3schools.com/jsref/jsref_prototype_math.asp

The*_*pha 5

你的代码是正确的,因为你打电话的时候

var trialcoder = new employee('trialcoder', 26, 'M');
Run Code Online (Sandbox Code Playgroud)

你有一个对象实例,employee就像任何其他对象一样,你可以为你的trialcoder对象添加属性

trialcoder.salary = 19000;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,salary属性仅对您的trialcoder对象可用,如果您创建另一个employee类似的实例,则var another = new employee()another对象中没有salary属性,但是,如果您执行类似的操作

function employee(name, age, sex) { //... }
employee.prototype.salary = 19000;
Run Code Online (Sandbox Code Playgroud)

然后使实例像

var anEmp = new employee();
console.log(anEmp.salary); // 19000
Run Code Online (Sandbox Code Playgroud)

再做一个例子

var newEmp = new employee();
console.log(newEmp.salary); // 19000
Run Code Online (Sandbox Code Playgroud)

如果你愿意,你可以

newEmp.salary = 10000;
console.log(anEmp.salary); // 10000
Run Code Online (Sandbox Code Playgroud)

这意味着,当您在prototype构造函数(employee)中添加属性时,每个对象实例可以共享相同的属性,并且在从构造函数创建实例后,您可以更改实例的属性,但这不会影响其他实例.希望现在已经足够清楚了.