'use strict'
function A() {}
var a = new A();
class B extends A {}
var b = new B();
console.log('====='); // =====
console.log(B.__proto__ === A); // true
console.log(B.prototype.__proto__ === A.prototype); // true
console.log(b.__proto__ === B.prototype); // true
console.log(a.__proto__ === A.prototype); // true
console.log(A.__proto__ === Function.__proto__); // true
console.log(Object.__proto__ === Function.__proto__); // true
console.log(Object.prototype === Function.__proto__.__proto__); // true
console.log(Object.prototype.__proto__ === null); // true
В JavaScript каждый объект (функция тоже объект!) имеет свойство __proto__
, свойство ссылается на его прототип.
Когда мы используем оператор new
с конструктором для создания нового объекта, свойство __proto__
нового объекта будет установлено со свойством конструктора prototype
, тогда конструктор будет вызван новым объектом, в этот процесс «это» будет ссылкой на новый объект в области конструктора, наконец, вернет новый объект.
Прототип конструктора - это свойство __proto__
, свойство Constructor prototype
работает с new
.
Конструктор должен быть функцией, но функция не всегда является конструктором, даже если она имеет свойство prototype
.
Цепочка прототипов фактически является свойством объекта __proto__
для ссылки на его прототип и свойство __proto__
прототипа ссылаться на прототип прототипа и т. д., пока не будет указано свойство __proto__
прототипа объекта, ссылающееся на нуль.
Например:
console.log(a.constructor === A); // true
// "a" don't have constructor,
// so it reference to A.prototype by its ``__proto__`` property,
// and found constructor is reference to A
]
[[Prototype]]
a Свойство nd __proto__
на самом деле то же самое.
Мы можем использовать метод getPrototypeOf объекта, чтобы получить прототип чего-то.
console.log(Object.getPrototypeOf(a) === a.__proto__); // true
Любая написанная нами функция может использоваться для создания объекта с new
, поэтому любой из этих функций может быть конструктором.
expression
является вашим другом:
plot(1,1, main=expression('title'^2)) #superscript
plot(1,1, main=expression('title'[2])) #subscript
См. выражение
plot(1:10,main=expression("This is a subscript "[2]))
[/g0]
Если вы хотите иметь несколько индексов в одном тексте, используйте звездочку (*) для разделения разделов:
plot(1:10, xlab=expression('hi'[5]*'there'[6]^8*'you'[2]))
plot(1:10, xlab=expression('hi'[5]*'there'[6]^8*'you'['down here']*'and'^'up'*'there'))
– smacdonald
11 September 2014 в 08:28
Индекс и обращение к сохраненному значению ...
a <- 10
plot(c(0,1), c(0,1), type = 'n', ann = FALSE, xaxt = 'n', yaxt = 'n')
text(0.2, 0.6, cex = 1.5, bquote(paste('S'['f']*' = ', .(a))))
В другом примере выражение работает для отрицательных верхних индексов без необходимости кавычек вокруг отрицательного числа:
title(xlab=expression("Nitrate Loading in kg ha"^-1*"yr"^-1))
, и вам нужно только * разделять разделы, как указано выше (когда вы пишете надстрочный индекс или подстрочный индекс и нужно добавить еще текст в выражение после).
bquote
при работе с подстрочными переменными. Скажем,nIter <- 2
, тогдаplot(1, 1, main = bquote(title[.(nIter)]))
именно то, что вам нужно (взято из списка рассылки R-help ). – fdetsch 7 January 2015 в 10:55